zoukankan      html  css  js  c++  java
  • CALayer 自定义属性绘制动画

    创建CircleLayer继承CALayer,添加新属性angle。
    @interfaceCircleLayer :CALayer
    @property(nonatomic,assign)CGFloatangle;
    @end
     
    覆盖父类方法,添加新的属性动画键值,返回YES表示给定的属性发生变化时导致layer的内容重绘
    + (BOOL)needsDisplayForKey:(NSString*)key
    {
       if([keyisEqualToString:@"angle"]) {
           returnYES;
        }
       return[superneedsDisplayForKey:key];
    }
     
    代码绘制部分
    - (void)drawInContext:(CGContextRef)ctx
    {
        CGFloat lineWidth = 3.0f;
        CGPoint centerPoint = CGPointMake(CGRectGetWidth(self.bounds)/2, CGRectGetHeight(self.bounds)/2);
       
        CGContextBeginPath(ctx);
        CGContextAddArc(ctx, centerPoint.x, centerPoint.y, CGRectGetWidth(self.bounds)/2 -lineWidth/2, 0.0f, self.angle, 0);
        CGContextEndPage(ctx);
       
        CGContextSetStrokeColorWithColor(ctx, [UIColorredColor].CGColor);
        CGContextSetLineWidth(ctx, lineWidth);
        CGContextStrokePath(ctx);
    }
     
    创建CABasicAnimation动画
    CircleLayer *layer = [CircleLayer layer];
    layer.frame = CGRectMake(10, 100, 40, 40);
       
    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"angle"];
    animation.fromValue = @(0.0f);
    animation.toValue = @(2*M_PI);
    animation.repeatCount = MAXFLOAT;
    animation.duration = 3.0f;
    [layer addAnimation:animation forKey:@"angle_key"];
     
     
  • 相关阅读:
    使用RecyclerView打造Gallery
    Retrofit简介与使用方法(翻译)
    迷宫实现递归版本C++
    牛客笔试题
    牛客笔试题---求最长重复词长度之和
    C++句柄解析
    C++双向循环链表实现
    String C++完整实现。
    String写时拷贝实现
    顺序表操作补充(查找方法增加)
  • 原文地址:https://www.cnblogs.com/shuleihen/p/4087392.html
Copyright © 2011-2022 走看看