我正在制作一个速度计应用程序,我希望箭头以正确的方式运行 - 如果我在一秒钟内从 0 公里发射到 200 公里,我希望它绕着横杆转一圈,但如果我将旋转角度设置得足够大, 它从底部走最短的路。
我如何让它几乎绕一圈而不是通过短路径?
这是我用于旋转的(简单的)代码:
[UIView animateWithDuration:0.3 animations:^(){
self.arrow.transform = CGAffineTransformRotate(CGAffineTransformIdentity, -4.4);
}];
我想我可以小块地旋转它,但有时可能需要将它从零快速旋转到最大值(例如,如果我们没有速度读数并且已经高速旋转,所以我们需要旋转箭头大部分屏幕)。
作为附带问题 - 如何对动画进行排队,以便我可以一个一个地应用它们?
最佳答案
我不久前为此制作了一个辅助函数,包含在下面。基本上,UIKit 对此毫无用处,你必须导入 QuartzCore 框架并使用 CAKeyframeAnimation
正如@Paul Cezanne 指出的那样,或者使用 CABasicAnimation
,我认为它会处理这样就好了。
使用非常简单,只需调用下面详述的方法,传递您想要旋转的 ImageView 、您想要的弧度旋转和动画持续时间,您的 ImageView 就会正确地进行动画处理。总会走“远路”,因为这里其实是有明确方向的。
如果您将正值传递给动画,它将顺时针旋转,然后自然地,负值将导致逆时针旋转。
[self rotateView:imageView rotationInRadians:M_PI duration:2.0];
- (void)rotateView:(UIImageView *)imageView rotationInRadians:(CGFloat)radians duration:(CFTimeInterval)duration
{
CABasicAnimation *rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
[rotationAnimation setToValue:[NSNumber numberWithFloat:radians]];
[rotationAnimation setDuration:duration];
[rotationAnimation setCumulative:YES];
[rotationAnimation setFillMode:kCAFillModeForwards];
[rotationAnimation setRemovedOnCompletion:NO];
[imageView.layer addAnimation:rotationAnimation forKey:@"gaugeRotationAnimation"];
}
关于ios - 使用 CGAffineTransform 旋转 UIView - 如何让它走完整路径而不是短路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17928521/