@@ -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