开发者社区> 问答> 正文

多个UIBezierPath拼接起来的运动轨迹,在执行动画的时候,动画出现卡顿,

要实现动画的所设置的路径代码:

- (void)drawRect:(CGRect)rect {

    UIColor *color = [UIColor redColor];
    [color set];
    _aPath = [UIBezierPath bezierPath];
        [_aPath addArcWithCenter:CGPointMake(self.center.x, self.center.y-50) radius:50 startAngle:M_PI_2 endAngle:M_PI*2.f*3/4 clockwise:YES];
        [_aPath addArcWithCenter:CGPointMake(self.center.x, self.center.y) radius:100 startAngle:-M_PI_2 endAngle:M_PI*2.f*3/4 clockwise:YES];
        [_aPath addArcWithCenter:CGPointMake(self.center.x, self.center.y) radius:100 startAngle:-M_PI_2 endAngle:M_PI*2.f*3/4/3 clockwise:YES];
        [_aPath addArcWithCenter:CGPointMake(self.center.x, self.center.y+50) radius:50 startAngle:M_PI_2 endAngle:M_PI*2.f*3/4 clockwise:YES];

    _aPath.lineWidth = 5.0;
    _aPath.lineCapStyle = kCGLineCapRound; //线条拐角
   _aPath.lineJoinStyle = kCGLineCapRound; //终点处理
    [_aPath stroke];
}
下面的是我执行动画代码:

CAKeyframeAnimation *keyframeAnimation=[CAKeyframeAnimation animationWithKeyPath:@"position"];
    keyframeAnimation.path = dr.aPath.CGPath;
    keyframeAnimation.repeatCount=1;
    keyframeAnimation.removedOnCompletion = NO;
    keyframeAnimation.fillMode = kCAFillModeForwards;
    keyframeAnimation.duration = 4.0f;
    keyframeAnimation.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    keyframeAnimation.delegate=self;
    [imageView.layer addAnimation:keyframeAnimation forKey:nil];

展开
收起
a123456678 2016-07-27 16:25:14 2248 0
1 条回答
写回答
取消 提交回答
  • 在执行动画的时候,动画出现卡顿
    如果“卡顿”指的是它中间会停下来的话,那是因为插值方式。默认的插值方式是kCAAnimationLinear,关键帧直线相连进行插值。要想让动画连续进行,可以简单加一句:

    keyframeAnimation.calculationMode = kCAAnimationPaced;
    有更精细的需求,可以自己用keyTimes和timingFunctions来控制。

    2019-07-17 20:00:49
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
3D动画的菜谱式灯光与云渲染 立即下载
全景视频的播放及优化 立即下载
360°全景视频播放器的实现原理 立即下载