Skip to content

Commit a44b4d1

Browse files
committed
Merge commit '9050f92b4022403b1fd039346515abdae7ba207f'
2 parents 787133b + 9050f92 commit a44b4d1

1 file changed

Lines changed: 72 additions & 74 deletions

File tree

QMUI/QMUIKit/UIKitExtensions/UIView+QMUI.m

Lines changed: 72 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -231,67 +231,22 @@ @implementation UIView (QMUI_Border)
231231
+ (void)load {
232232
static dispatch_once_t onceToken;
233233
dispatch_once(&onceToken, ^{
234+
ReplaceMethod([self class], @selector(initWithFrame:), @selector(qmui_initWithFrame:));
235+
ReplaceMethod([self class], @selector(initWithCoder:), @selector(qmui_initWithCoder:));
234236
ReplaceMethod([self class], @selector(layoutSublayersOfLayer:), @selector(qmui_layoutSublayersOfLayer:));
235237
});
236238
}
237239

238-
static char kAssociatedObjectKey_borderPosition;
239-
- (void)setQmui_borderPosition:(QMUIBorderViewPosition)qmui_borderPosition {
240-
objc_setAssociatedObject(self, &kAssociatedObjectKey_borderPosition, @(qmui_borderPosition), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
241-
[self setNeedsLayout];
242-
}
243-
244-
- (QMUIBorderViewPosition)qmui_borderPosition {
245-
return (QMUIBorderViewPosition)[objc_getAssociatedObject(self, &kAssociatedObjectKey_borderPosition) unsignedIntegerValue];
246-
}
247-
248-
static char kAssociatedObjectKey_borderWidth;
249-
- (void)setQmui_borderWidth:(CGFloat)qmui_borderWidth {
250-
objc_setAssociatedObject(self, &kAssociatedObjectKey_borderWidth, @(qmui_borderWidth), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
251-
[self setNeedsLayout];
252-
}
253-
254-
- (CGFloat)qmui_borderWidth {
255-
return (CGFloat)[objc_getAssociatedObject(self, &kAssociatedObjectKey_borderWidth) floatValue];
240+
- (instancetype)qmui_initWithFrame:(CGRect)frame {
241+
[self qmui_initWithFrame:frame];
242+
[self setDefaultStyle];
243+
return self;
256244
}
257245

258-
static char kAssociatedObjectKey_borderColor;
259-
- (void)setQmui_borderColor:(UIColor *)qmui_borderColor {
260-
objc_setAssociatedObject(self, &kAssociatedObjectKey_borderColor, qmui_borderColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
261-
[self setNeedsLayout];
262-
}
263-
264-
- (UIColor *)qmui_borderColor {
265-
return (UIColor *)objc_getAssociatedObject(self, &kAssociatedObjectKey_borderColor);
266-
}
267-
268-
static char kAssociatedObjectKey_dashPhase;
269-
- (void)setQmui_dashPhase:(CGFloat)qmui_dashPhase {
270-
objc_setAssociatedObject(self, &kAssociatedObjectKey_dashPhase, @(qmui_dashPhase), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
271-
[self setNeedsLayout];
272-
}
273-
274-
- (CGFloat)qmui_dashPhase {
275-
return (CGFloat)[objc_getAssociatedObject(self, &kAssociatedObjectKey_dashPhase) floatValue];
276-
}
277-
278-
static char kAssociatedObjectKey_dashPattern;
279-
- (void)setQmui_dashPattern:(NSArray<NSNumber *> *)qmui_dashPattern {
280-
objc_setAssociatedObject(self, &kAssociatedObjectKey_dashPattern, qmui_dashPattern, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
281-
[self setNeedsLayout];
282-
}
283-
284-
- (NSArray *)qmui_dashPattern {
285-
return (NSArray *)objc_getAssociatedObject(self, &kAssociatedObjectKey_dashPattern);
286-
}
287-
288-
static char kAssociatedObjectKey_borderLayer;
289-
- (void)setQmui_borderLayer:(CAShapeLayer *)qmui_borderLayer {
290-
objc_setAssociatedObject(self, &kAssociatedObjectKey_borderLayer, qmui_borderLayer, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
291-
}
292-
293-
- (CAShapeLayer *)qmui_borderLayer {
294-
return (CAShapeLayer *)objc_getAssociatedObject(self, &kAssociatedObjectKey_borderLayer);
246+
- (instancetype)qmui_initWithCoder:(NSCoder *)aDecoder {
247+
[self qmui_initWithCoder:aDecoder];
248+
[self setDefaultStyle];
249+
return self;
295250
}
296251

297252
- (void)qmui_layoutSublayersOfLayer:(CALayer *)layer {
@@ -312,16 +267,8 @@ - (void)qmui_layoutSublayersOfLayer:(CALayer *)layer {
312267

313268
if (!self.qmui_borderLayer) {
314269
self.qmui_borderLayer = [CAShapeLayer layer];
315-
// 移除属于CALayer部分的属性的隐性动画
316270
[self.qmui_borderLayer qmui_removeDefaultAnimations];
317-
// 移除属于CAShapeLayer部分的属性的隐性动画
318-
[self removeDefautShapeLayerAnimations];
319271
[self.layer addSublayer:self.qmui_borderLayer];
320-
321-
// 设置默认值
322-
self.qmui_dashPhase = self.qmui_dashPhase == 0 ? 0 : self.qmui_dashPhase;
323-
self.qmui_borderColor = self.qmui_borderColor ? self.qmui_borderColor : UIColorSeparator;
324-
self.qmui_borderWidth = self.qmui_borderWidth == 0 ? PixelOne : self.qmui_borderWidth;
325272
}
326273
self.qmui_borderLayer.frame = self.bounds;
327274

@@ -362,17 +309,68 @@ - (void)qmui_layoutSublayersOfLayer:(CALayer *)layer {
362309
self.qmui_borderLayer.path = path.CGPath;
363310
}
364311

365-
// 移除qmui_borderLayer属于CAShapeLayer部分的属性的隐性动画
366-
- (void)removeDefautShapeLayerAnimations {
367-
if (!self.qmui_borderLayer) {
368-
return;
369-
}
370-
NSMutableDictionary *dict = [self.qmui_borderLayer.actions mutableCopy];
371-
dict[@"strokeColor"] = [NSNull null];
372-
dict[@"lineWidth"] = [NSNull null];
373-
dict[@"lineDashPhase"] = [NSNull null];
374-
dict[@"path"] = [NSNull null];
375-
self.qmui_borderLayer.actions = [NSDictionary dictionaryWithDictionary:dict];
312+
- (void)setDefaultStyle {
313+
self.qmui_borderWidth = PixelOne;
314+
self.qmui_borderColor = UIColorSeparator;
315+
}
316+
317+
static char kAssociatedObjectKey_borderPosition;
318+
- (void)setQmui_borderPosition:(QMUIBorderViewPosition)qmui_borderPosition {
319+
objc_setAssociatedObject(self, &kAssociatedObjectKey_borderPosition, @(qmui_borderPosition), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
320+
[self setNeedsLayout];
321+
}
322+
323+
- (QMUIBorderViewPosition)qmui_borderPosition {
324+
return (QMUIBorderViewPosition)[objc_getAssociatedObject(self, &kAssociatedObjectKey_borderPosition) unsignedIntegerValue];
325+
}
326+
327+
static char kAssociatedObjectKey_borderWidth;
328+
- (void)setQmui_borderWidth:(CGFloat)qmui_borderWidth {
329+
objc_setAssociatedObject(self, &kAssociatedObjectKey_borderWidth, @(qmui_borderWidth), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
330+
[self setNeedsLayout];
331+
}
332+
333+
- (CGFloat)qmui_borderWidth {
334+
return (CGFloat)[objc_getAssociatedObject(self, &kAssociatedObjectKey_borderWidth) floatValue];
335+
}
336+
337+
static char kAssociatedObjectKey_borderColor;
338+
- (void)setQmui_borderColor:(UIColor *)qmui_borderColor {
339+
objc_setAssociatedObject(self, &kAssociatedObjectKey_borderColor, qmui_borderColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
340+
[self setNeedsLayout];
341+
}
342+
343+
- (UIColor *)qmui_borderColor {
344+
return (UIColor *)objc_getAssociatedObject(self, &kAssociatedObjectKey_borderColor);
345+
}
346+
347+
static char kAssociatedObjectKey_dashPhase;
348+
- (void)setQmui_dashPhase:(CGFloat)qmui_dashPhase {
349+
objc_setAssociatedObject(self, &kAssociatedObjectKey_dashPhase, @(qmui_dashPhase), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
350+
[self setNeedsLayout];
351+
}
352+
353+
- (CGFloat)qmui_dashPhase {
354+
return (CGFloat)[objc_getAssociatedObject(self, &kAssociatedObjectKey_dashPhase) floatValue];
355+
}
356+
357+
static char kAssociatedObjectKey_dashPattern;
358+
- (void)setQmui_dashPattern:(NSArray<NSNumber *> *)qmui_dashPattern {
359+
objc_setAssociatedObject(self, &kAssociatedObjectKey_dashPattern, qmui_dashPattern, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
360+
[self setNeedsLayout];
361+
}
362+
363+
- (NSArray *)qmui_dashPattern {
364+
return (NSArray *)objc_getAssociatedObject(self, &kAssociatedObjectKey_dashPattern);
365+
}
366+
367+
static char kAssociatedObjectKey_borderLayer;
368+
- (void)setQmui_borderLayer:(CAShapeLayer *)qmui_borderLayer {
369+
objc_setAssociatedObject(self, &kAssociatedObjectKey_borderLayer, qmui_borderLayer, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
370+
}
371+
372+
- (CAShapeLayer *)qmui_borderLayer {
373+
return (CAShapeLayer *)objc_getAssociatedObject(self, &kAssociatedObjectKey_borderLayer);
376374
}
377375

378376
@end

0 commit comments

Comments
 (0)