本文介绍: 先上效果如下忽略CSDN这个动画展示效果,掉帧严重,导致下面的动画流畅。上代码typedef NS_ENUM(NSInteger,UISpinnerAnimationViewAnimation){ UISpinnerAnimationViewAnimationSpinner,//拖尾绕圈 UISpinnerAnimationViewAnimationRador, //雷达};@interface UISpinnerAnimationView : UIVie..

 先上效果如下忽略CSDN这个动画展示效果,掉帧严重,导致下面的动画不流畅。

 上代码

typedef NS_ENUM(NSInteger,UISpinnerAnimationViewAnimation)
{
    UISpinnerAnimationViewAnimationSpinner,//拖尾绕圈
    UISpinnerAnimationViewAnimationRador,  //雷达
};

@interface UISpinnerAnimationView : UIView

//画笔粗细默认为6
@property (nonatomic,assign) CGFloat lineWidth;
//画笔轮廓颜色
@property (nonatomic,strong) UIColor *strokeColor;
//填充颜色,如使用雷达效果配置填充色
@property (nonatomic,strong) UIColor *fillColor;

/* An object providing the contents of the layer, typically a CGImageRef
 * or an IOSurfaceRef, but may be something else. (For example, NSImage
 * objects are supported on Mac OS X 10.6 and later.) Default value is nil.
 * Animatable. */
@property (nonatomic,strong) UIImage *contentImage;

//动画完成时间
@property (nonatomic,assign) CGFloat aniDuration;

@property (nonatomic,assign) UISpinnerAnimationViewAnimation animationType;

- (void)startAnimation;
- (void)stopAnimation;
@end

实现逻辑


typedef void (^UIProgressHUDViewCompleteBlock)(void);
typedef UIView *(^UIProgressHUDInterfaceViewBlock)(void);

@implementation UISpinnerAnimationView

- (instancetype)initWithFrame:(CGRect)frame
{
    if ([super initWithFrame:frame])
    {
        self.lineWidth = 6;
        self.strokeColor = [UIColor colorWithRed:2.0/255.0 green:134.0/255.0 blue:224.0/255.0 alpha:1];
        self.animationType = UISpinnerAnimationViewAnimationSpinner;
        
        NSString *imageData = @"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";
        NSData *data = [[NSData alloc] initWithBase64EncodedString:imageData options:NSDataBase64DecodingIgnoreUnknownCharacters];
        UIImage *image = [UIImage imageWithData:data];
        
        self.contentImage = image;
        self.aniDuration = 1;
        
        [self.layer setMasksToBounds:YES];
        [self.layer setCornerRadius:frame.size.width / 2];
        [self.layer setBorderColor:[UIColor clearColor].CGColor];
    }
    return self;
}


- (void)startAnimation
{
    if (self.animationType == UISpinnerAnimationViewAnimationSpinner)
    {
        [self startSpinerAnimation];
    }
    else if (self.animationType == UISpinnerAnimationViewAnimationRador)
    {
        [self startRadorAnimation];
    }
}


- (void)startSpinerAnimation
{
    CGFloat lineWidth = self.lineWidth;
    CGPoint arcCenter = CGPointMake(self.frame.size.width / 2, self.frame.size.height / 2);
    UIBezierPath *smoothedPath = [UIBezierPath bezierPath];
    [smoothedPath addArcWithCenter:arcCenter radius:self.frame.size.width / 2 startAngle:0 endAngle:2 * M_PI clockwise:YES];
    CAShapeLayer *layer = [CAShapeLayer layer];
    [layer setContentsScale:UIScreen.mainScreen.scale];
    [layer setFrame:CGRectMake(0, 0, arcCenter.x * 2, arcCenter.y * 2)];
    [layer setFillColor:UIColor.clearColor.CGColor];
    [layer setStrokeColor:self.strokeColor.CGColor];
    [layer setLineWidth:lineWidth];
    [layer setLineCap:kCALineCapRound];
    [layer setLineJoin:kCALineJoinBevel];
    [layer setPath:smoothedPath.CGPath];
    [layer setMask:[CALayer layer]];
    layer.mask.contents = (__bridge id _Nullable)(self.contentImage.CGImage);
    [layer.mask setFrame:self.bounds];
    
    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
    animation.fromValue = [NSNumber numberWithFloat:0.0];
    animation.toValue = [NSNumber numberWithFloat:2 * M_PI];
    animation.duration = self.aniDuration;
    [animation setRemovedOnCompletion:NO];
    animation.repeatCount = HUGE_VALF;
    animation.autoreverses = NO;
    
    [layer addAnimation:animation forKey:@"rotate"];
    
    [self.layer addSublayer:layer];
}


- (void)startRadorAnimation
{
    CGFloat lineWidth = self.lineWidth;
    CGPoint arcCenter = CGPointMake(self.frame.size.width / 2, self.frame.size.height / 2);
    UIBezierPath *smoothedPath = [UIBezierPath bezierPath];
    [smoothedPath addArcWithCenter:arcCenter radius:self.frame.size.width / 2 startAngle:0 endAngle:2 * M_PI clockwise:YES];
    CAShapeLayer *layer = [CAShapeLayer layer];
    [layer setContentsScale:UIScreen.mainScreen.scale];
    [layer setFrame:CGRectMake(0, 0, arcCenter.x * 2, arcCenter.y * 2)];
    [layer setFillColor:self.fillColor.CGColor];
    [layer setStrokeColor:self.strokeColor.CGColor];
    [layer setLineWidth:lineWidth];
    [layer setLineCap:kCALineCapRound];
    [layer setLineJoin:kCALineJoinBevel];
    [layer setPath:smoothedPath.CGPath];
    [layer setMask:[CALayer layer]];
    layer.mask.contents = (__bridge id _Nullable)(self.contentImage.CGImage);
    [layer.mask setFrame:self.bounds];
    
    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
    animation.fromValue = [NSNumber numberWithFloat:0.0];
    animation.toValue = [NSNumber numberWithFloat:2 * M_PI];
    animation.duration = self.aniDuration;
    [animation setRemovedOnCompletion:NO];
    animation.repeatCount = HUGE_VALF;
    animation.autoreverses = NO;
    
    [layer addAnimation:animation forKey:@"rotate"];
    [self setBackgroundColor:self.fillColor];
    [self.layer addSublayer:layer];
}


- (void)stopAnimation
{
    dispatch_async(dispatch_get_main_queue(), ^{
        [[self.layer sublayers] enumerateObjectsUsingBlock:^(__kindof CALayer * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
            [obj removeAllAnimations];
        }];
    });
}

@end

使用方法

CGFloat sz = MIN(self.view.bounds.size.width, self.view.bounds.size.height)/2;
    CGRect ft = CGRectMake((self.view.bounds.size.width-sz)/2, 120, sz, sz);
    UISpinnerAnimationView *c1View = [[UISpinnerAnimationView alloc] initWithFrame:ft];
    [c1View.layer setMasksToBounds:YES];
    [c1View.layer setCornerRadius:sz/2];
    [c1View setAnimationType:UISpinnerAnimationViewAnimationRador];
    [c1View setFillColor:[UIColor colorWithRed:2.0/255.0 green:134.0/255.0 blue:224.0/255.0 alpha:0.65]];
    [self.view addSubview:c1View];
    
    [c1View startAnimation];

原文地址:https://blog.csdn.net/yunhuaikong/article/details/124266755

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_39464.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注