iOS-简单实现骨架屏

骨架屏数据请求前、请求后

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

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容