iOS 仿騰訊視頻加載動(dòng)畫

obloading1@2x.png
obloading2@2x.png
obloading3@2x.png

動(dòng)畫.gif
#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@interface LMLoadingView : UIView
///初始化
+ (instancetype)shareInstancetype;
///控制動(dòng)畫開(kāi)關(guān)
@property (nonatomic, assign) BOOL Startanimationed;
@end

NS_ASSUME_NONNULL_END
#import "LMLoadingView.h"
@interface LMLoadingView ()

@property (nonatomic, strong) UIImageView *iconV1;
@property (nonatomic, strong) UIImageView *iconV2;
@property (nonatomic, strong) UIImageView *iconV3;

@end
@implementation LMLoadingView

+ (instancetype)shareInstancetype {
    static LMLoadingView *loadingView;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        loadingView = LMLoadingView.new;
    });
    return loadingView;
}

- (instancetype)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
        self.iconV1 = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 9, 10)];
        self.iconV1.image = [UIImage imageNamed:@"obloading1"];
        [self addSubview:self.iconV1];
        self.iconV2 = [[UIImageView alloc]initWithFrame:CGRectMake(11, 0, 9, 10)];
        self.iconV2.image = [UIImage imageNamed:@"obloading2"];
        [self addSubview:self.iconV2];
        self.iconV3 = [[UIImageView alloc]initWithFrame:CGRectMake(22, 0, 9, 10)];
        self.iconV3.image = [UIImage imageNamed:@"obloading3"];
        [self addSubview:self.iconV3];
        self.iconV1.hidden = self.iconV2.hidden = self.iconV3.hidden = YES;
    }
    return self;
}

- (void)setStartanimationed:(BOOL)Startanimationed {
    _Startanimationed = Startanimationed;
    if (Startanimationed) {
        [self startAnimation];
    }else{
        [self.layer removeAllAnimations];
    }
}
///動(dòng)畫效果
-  (void)startAnimation {
    CGFloat duration = 2.0;
    CGFloat dur = 1.0/12;
    KWeakSelf
    self.iconV1.hidden = self.iconV2.hidden =self.iconV3.hidden = NO;
    weakSelf.iconV1.transform = CGAffineTransformMakeScale(0, 0);
    weakSelf.iconV2.transform = CGAffineTransformMakeScale(0, 0);
    weakSelf.iconV3.transform = CGAffineTransformMakeScale(0, 0);
    [UIView animateKeyframesWithDuration:duration delay:0 options:UIViewKeyframeAnimationOptionRepeat |UIViewKeyframeAnimationOptionCalculationModeCubic animations:^{
        [UIView addKeyframeWithRelativeStartTime:0 relativeDuration:dur animations:^{
            weakSelf.iconV1.transform = CGAffineTransformMakeScale(0, 0);
            weakSelf.iconV2.transform = CGAffineTransformMakeScale(0, 0);
            weakSelf.iconV3.transform = CGAffineTransformMakeScale(0, 0);

        }];
        [UIView addKeyframeWithRelativeStartTime:dur relativeDuration:dur*2 animations:^{
            weakSelf.iconV1.transform = CGAffineTransformMakeScale(1, 1);
            weakSelf.iconV2.transform = CGAffineTransformMakeScale(0, 0);
            weakSelf.iconV3.transform = CGAffineTransformMakeScale(0, 0);

        }];
        [UIView addKeyframeWithRelativeStartTime:dur*2 relativeDuration:dur*3 animations:^{
            weakSelf.iconV1.transform = CGAffineTransformMakeScale(1.3, 1.3);
            weakSelf.iconV2.transform = CGAffineTransformMakeScale(0, 0);
            weakSelf.iconV3.transform = CGAffineTransformMakeScale(0, 0);

            
        }];
        [UIView addKeyframeWithRelativeStartTime:dur*3 relativeDuration:dur*4 animations:^{
            weakSelf.iconV1.transform = CGAffineTransformMakeScale(1, 1);
            weakSelf.iconV2.transform = CGAffineTransformMakeScale(0, 0);
            weakSelf.iconV3.transform = CGAffineTransformMakeScale(0, 0);

        }];
        [UIView addKeyframeWithRelativeStartTime:dur*4 relativeDuration:dur*5 animations:^{
            weakSelf.iconV1.transform = CGAffineTransformMakeScale(0, 0);
            weakSelf.iconV2.transform = CGAffineTransformMakeScale(0, 0);
            weakSelf.iconV3.transform = CGAffineTransformMakeScale(0, 0);

        }];
        [UIView addKeyframeWithRelativeStartTime:dur*5 relativeDuration:dur*6 animations:^{
            weakSelf.iconV1.transform = CGAffineTransformMakeScale(0, 0);
            weakSelf.iconV2.transform = CGAffineTransformMakeScale(1, 1);
            weakSelf.iconV3.transform = CGAffineTransformMakeScale(0, 0);

        }];
        [UIView addKeyframeWithRelativeStartTime:dur*6 relativeDuration:dur*7 animations:^{
            weakSelf.iconV1.transform = CGAffineTransformMakeScale(0, 0);
            weakSelf.iconV2.transform = CGAffineTransformMakeScale(1.3, 1.3);
            weakSelf.iconV3.transform = CGAffineTransformMakeScale(0, 0);

        }];
        [UIView addKeyframeWithRelativeStartTime:dur*7 relativeDuration:dur*8 animations:^{
            weakSelf.iconV1.transform = CGAffineTransformMakeScale(0, 0);
            weakSelf.iconV2.transform = CGAffineTransformMakeScale(1, 1);
            weakSelf.iconV3.transform = CGAffineTransformMakeScale(0, 0);

        }];
        [UIView addKeyframeWithRelativeStartTime:dur*8 relativeDuration:dur*9 animations:^{
            weakSelf.iconV1.transform = CGAffineTransformMakeScale(0, 0);
            weakSelf.iconV2.transform = CGAffineTransformMakeScale(0, 0);
            weakSelf.iconV3.transform = CGAffineTransformMakeScale(1, 1);

        }];
        [UIView addKeyframeWithRelativeStartTime:dur*9 relativeDuration:dur*10 animations:^{
            weakSelf.iconV1.transform = CGAffineTransformMakeScale(0, 0);
            weakSelf.iconV2.transform = CGAffineTransformMakeScale(0, 0);
            weakSelf.iconV3.transform = CGAffineTransformMakeScale(1.3, 1.3);

        }];
        [UIView addKeyframeWithRelativeStartTime:dur*10 relativeDuration:dur*11 animations:^{
            weakSelf.iconV1.transform = CGAffineTransformMakeScale(0, 0);
            weakSelf.iconV2.transform = CGAffineTransformMakeScale(0, 0);
            weakSelf.iconV3.transform = CGAffineTransformMakeScale(1, 1);
        }];
        [UIView addKeyframeWithRelativeStartTime:dur*11 relativeDuration:1 animations:^{
            weakSelf.iconV1.transform = CGAffineTransformMakeScale(0, 0);
            weakSelf.iconV2.transform = CGAffineTransformMakeScale(0, 0);
            weakSelf.iconV3.transform = CGAffineTransformMakeScale(0, 0);
        }];
    } completion:^(BOOL finished) {
        
    }];
    
}

@end

如果有更好的方法,歡迎指教

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容