#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);
}