CAShapeLayer设计了一个倒计时动画 在不断开始和结束过程中越走越快

发布于 2022-09-04 10:50:58 字数 1627 浏览 21 评论 0

@property(nonatomic,strong)CADisplayLink *timer;//定时器

#pragma mark - lazyInstall
-(CAShapeLayer*)shapeLayer {
    if (!_shapeLayer) {
        //创建出CAShapeLayer
        self.shapeLayer = [CAShapeLayer layer];
        self.shapeLayer.frame = CGRectMake(0, 0, 57, 80);
        self.shapeLayer.position = self.potrait.center;
        self.shapeLayer.fillColor = [UIColor clearColor].CGColor;
        
        //设置线条的宽度和颜色
        self.shapeLayer.lineWidth = 2.0f;
        self.shapeLayer.strokeColor = [UIColor greenColor].CGColor;
       
        //创建出圆形贝塞尔曲线
        UIBezierPath *circlePath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, 57, 80) cornerRadius:3];
        //让贝塞尔曲线与CAShapeLayer产生联系
        self.shapeLayer.path = circlePath.CGPath;
    }
    return _shapeLayer;
}

#pragma mark - Timer
-(void)startCycle {//用定时器模拟数值输入的情况
    [self.layer addSublayer:self.shapeLayer];
    
    _shapeLayer.strokeStart = 0;
    _shapeLayer.strokeEnd = 1;

    _timer = [CADisplayLink displayLinkWithTarget:self selector:@selector(circleAnimationType)];
    _timer.frameInterval = 1; //设置刷新60次响应一次
    [_timer addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
}

- (void)circleAnimationType {//用定时器调用的方法
    if (_shapeLayer.strokeStart != 1) {
        _shapeLayer.strokeStart += 倒计时时间;
    }
}

-(void)endCycle {
    [_timer invalidate];
    _timer = nil;
    
    _shapeLayer.strokeStart = 1;
    _shapeLayer.strokeEnd = 0;
//    [_timer setFireDate:[NSDate distantFuture]];
}

其中-(void)startCycle是开始倒计时方法,-(void)endCycle是结束倒计时方法。经过不断的开始和结束,动画的倒计时时长越来越短,是为什么??求大神解惑

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

衣神在巴黎 2022-09-11 10:50:58

if(!_timer){

 _timer = [CADisplayLink displayLinkWithTarget:self         selector:@selector(circleAnimationType)];
_timer.frameInterval = 1; //设置刷新60次响应一次
[_timer addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文