#import
NS_ASSUME_NONNULL_BEGIN
@interfaceUILabel(SkeletonAnimation)
@property (assign,nonatomic) CAGradientLayer *skeltonLoadMask;
@property (assign,nonatomic) IBInspectable BOOL showSkeletonLoadMasking;
@end
NS_ASSUME_NONNULL_END
#import "UILabel+SkeletonAnimation.h"
#import
#define RGBCOLOR(r,g,b) [UIColor colorWithRed:(r)/255.0fgreen:(g)/255.0fblue:(b)/255.0falpha:1.0]
staticconstchar*maskFlag ="maskFlag";
staticconstchar*showMaskFlag ="showMaskFlag";
@implementationUILabel(SkeletonAnimation)
- (BOOL)showSkeletonLoadMasking {
return [objc_getAssociatedObject(self, &showMaskFlag) boolValue];
}
- (void)setShowSkeletonLoadMasking:(BOOL)showSkeletonLoadMasking {
objc_setAssociatedObject(self,&showMaskFlag,@(showSkeletonLoadMasking),OBJC_ASSOCIATION_ASSIGN);
if(!self.skeltonLoadMask){
CAGradientLayer *calayer = [CAGradientLayer layer];
calayer.colors=@[(__bridgeid)RGBCOLOR(245,245,245).CGColor,
(__bridgeid)RGBCOLOR(235,235,235).CGColor,
(__bridgeid)RGBCOLOR(245,245,245).CGColor,
(__bridgeid)RGBCOLOR(235,235,235).CGColor,
(__bridgeid)RGBCOLOR(245,245,245).CGColor];
calayer.locations=@[@-1.0,@-0.5,@0,@0.5,@1.0];
calayer.startPoint=CGPointMake(0,0);
calayer.endPoint=CGPointMake(1.0,0);
[self setNeedsLayout];
// [self layoutIfNeeded];
calayer.frame=self.bounds;
calayer.cornerRadius=4;
CABasicAnimation* rotationAnimation;
rotationAnimation = [CABasicAnimationanimationWithKeyPath:@"locations"];
rotationAnimation.fromValue=@[@-1.0,@-0.5,@0,@0.5,@1.0];
rotationAnimation.toValue=@[@0,@0.5,@1.0,@1.5,@2.0];
rotationAnimation.duration=1;
rotationAnimation.repeatCount=MAXFLOAT;
rotationAnimation.removedOnCompletion=NO;
[calayeraddAnimation:rotationAnimationforKey:nil];
calayer.hidden=YES;
self.skeltonLoadMask= calayer;
[self.layeraddSublayer:self.skeltonLoadMask];
}
if(showSkeletonLoadMasking){
self.skeltonLoadMask.hidden = NO;
}else{
self.skeltonLoadMask.hidden = YES;
}
}
- (CAGradientLayer *)skeltonLoadMask {
return objc_getAssociatedObject(self, &maskFlag);
}
- (void)setSkeltonLoadMask:(CAGradientLayer*)skeltonLoadMask {
objc_setAssociatedObject(self,&maskFlag,skeltonLoadMask ,OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}