美文网首页
CAShapeLayer

CAShapeLayer

作者: coder_hong | 来源:发表于2016-10-30 22:37 被阅读25次

    普通CALayer在被初始化时是需要给一个frame值的,这个frame值一般都与给定view的bounds值一致,它本身是有形状的,而且是矩形.

    CAShapeLayer在初始化时也需要给一个frame值,但是,它本身没有形状,它的形状来源于你给定的一个path,然后它去取CGPath值,它与CALayer有着很大的区别

    CAShapeLayer有着几点很重要:

    • 它依附于一个给定的path,必须给与path,而且,即使path不完整也会自动首尾相接
    • strokeStart以及strokeEnd代表着在这个path中所占用的百分比
    • CAShapeLayer动画仅仅限于沿着边缘的动画效果,它实现不了填充效果

    "CyleView.h"

    @interface CyleView : UIView
    {
        
        CAShapeLayer *layer;
        
    }
    
    - (void)strokeStart:(CGFloat)value;
    - (void)strokeEnd:(CGFloat)value;
    
    @end
    
    

    "CyleView.m"

    @implementation CyleView
    
    - (id)initWithFrame:(CGRect)frame
    {
        self = [super initWithFrame:frame];
        if (self)
        {
            layer = [CAShapeLayer layer];
            layer.frame = self.bounds;
            
            UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(self.frame.size.height / 2.0f,
                                                                                   self.frame.size.height / 2.0f)
                                                                radius:self.frame.size.height / 2.f
                                                            startAngle:0
                                                              endAngle:M_PI * 2
                                                             clockwise:YES];
            
            layer.strokeColor   = [UIColor orangeColor].CGColor;   // 边缘线的颜色
            layer.fillColor     = [UIColor clearColor].CGColor;   // 闭环填充的颜色
            layer.lineCap       = kCALineCapRound;               // 边缘线的类型
            layer.path          = path.CGPath;                    // 从贝塞尔曲线获取到形状
            layer.lineWidth     = 5.0f;                           // 线条宽度
            layer.strokeStart   = 0.0f;
            layer.strokeEnd     = 0.0f;
            /*
             如果默认是一个圆圈
            layer.strokeStart = 0.0;
            layer.strokeEnd = 1.0;
             
             */
            [self.layer addSublayer:layer];
        }
        return self;
    }
    
    - (void)strokeStart:(CGFloat)value
    {
        layer.speed = 1;
        layer.strokeStart = value;
    }
    
    - (void)strokeEnd:(CGFloat)value
    {
        layer.speed = 1;
        layer.strokeEnd = value;
    }
    
    
    @end
    

    相关文章

      网友评论

          本文标题:CAShapeLayer

          本文链接:https://www.haomeiwen.com/subject/qvvuuttx.html