我在UIView上有5个按钮,我想沿着圆形路径均匀地绘制,并让它们沿着该路径连续旋转。要清楚,我不想自己旋转按钮,我只是希望它们沿着圆形路径移动。
管理此问题的最佳方法是什么?
答案 0 :(得分:1)
为每个按钮创建UIBezierPath
或CGPath
,调整起始角度和结束角度以考虑每个按钮的初始起点。然后为每个按钮/路径创建一个CAKeyframeAnimation,为其指定路径,将其设置为自动重复并将其添加到相应按钮的图层。
UIBezierPath
方法+bezierPathWithArcCenter:radius:startAngle:endAngle:clockwise:
将帮助您创建循环路径。你需要计算正确的角度,但这只是一小部分数学。
答案 1 :(得分:1)
没有理由在路径上单独设置每个按钮的动画。你说你在UIView上有5个按钮。只需旋转您已添加它们的视图,所有其他按钮将旋转,提供与您要求路径相同的效果。
诀窍是你需要一个显式动画而不是UIView动画快捷键:
CABasicAnimation* rotationAnimation =
[CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
[rotationAnimation setToValue:[NSNumber numberWithFloat:DegreesToRadians(360)]];
// Make a full rotation in five seconds
[rotationAnimation setDuration:5.0];
// Repeat forever.
[rotationAnimation setRepeatCount:HUGE_VALF];
// Make the animation timing linear
[rotationAnimation setTimingFunction:
[CAMediaTimingFunction
functionWithName:kCAMediaTimingFunctionLinear]];
[[rotationView layer] addAnimation:rotationAnimation forKey:nil];
变量 rotationView 是包含所有按钮的视图。此时,您真正需要做的就是计算最初应该放置按钮的位置。其他一切都是为你处理的。