动画

用Layer层蒙板实现圆形滚动条效果

2016-11-22  本文已影响28人  秦砖
先行附上效果图 滚动效果

Mask

Mask又叫蒙板,顾名思义Mask就是layer上的一层layer,于普通的layer层不同的是,Mask Layer是不会显示在界面上的。它的主要功能是通过自身的alpha值来确定被它遮盖的layer层上的点是否显示。如果结果为不显示,那么屏幕上会有什么样的效果呢?难道会直接显示黑点吗?当然不会了,系统会将被遮盖layer的下一层layer点显示出来。这样就间接的形成了被遮盖层透明的效果。

实现方案

实现代码

    CGRect cycleFrame = CGRectMake(50, 50, 100, 100);
    UIBezierPath* cyclePath = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, 100, 100)];
    
    CAShapeLayer* blackCycleLayer = [CAShapeLayer layer];
    [blackCycleLayer setFrame:cycleFrame];
    [blackCycleLayer setFillColor:[UIColor clearColor].CGColor];
    [blackCycleLayer setLineWidth:1.0f];
    [blackCycleLayer setStrokeColor:[UIColor blackColor].CGColor];
    [blackCycleLayer setPath:cyclePath.CGPath];
    [self.view.layer addSublayer:blackCycleLayer];
    
    CAShapeLayer* redCycleLayer = [CAShapeLayer layer];
    [redCycleLayer setFrame:cycleFrame];
    [redCycleLayer setFillColor:[UIColor clearColor].CGColor];
    [redCycleLayer setLineWidth:1.0f];
    [redCycleLayer setStrokeColor:[UIColor redColor].CGColor];
    [redCycleLayer setPath:cyclePath.CGPath];
    [self.view.layer addSublayer:redCycleLayer];

    CAShapeLayer* maskLayer = [CAShapeLayer layer];
    [maskLayer setFillColor:[UIColor yellowColor].CGColor];
    [maskLayer setLineWidth:1.0f];
    [maskLayer setStrokeColor:[UIColor blueColor].CGColor];
    UIBezierPath* path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(50, 50) radius:50 startAngle:0.0f endAngle:M_PI_4 clockwise:YES];
    [maskLayer setPath:path.CGPath];
    [redCycleLayer setMask:maskLayer];
    
    CABasicAnimation* rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
    [rotationAnimation setRepeatCount:HUGE_VALF];
    [rotationAnimation setDuration:2.0f];
    [rotationAnimation setToValue:@(2*M_PI)];
    [redCycleLayer addAnimation:rotationAnimation forKey:nil];
上一篇 下一篇

猜你喜欢

热点阅读