多个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];
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果“卡顿”指的是它中间会停下来的话,那是因为插值方式。默认的插值方式是
kCAAnimationLinear
,关键帧直线相连进行插值。要想让动画连续进行,可以简单加一句:有更精细的需求,可以自己用keyTimes和timingFunctions来控制。