ios - 使用 CGAffineTransform 旋转 UIView - 如何让它走完整路径而不是短路径?

标签 ios objective-c

我正在制作一个速度计应用程序,我希望箭头以正确的方式运行 - 如果我在一秒钟内从 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/

相关文章:

iphone - 在 iOS 中管理布局

iphone - 查找图像中心

ios - 在 TextField iOS 中按退格键/删除键

objective-c - "Dynamic" float 显示?

ios - 如何为我的自定义 UICollectionViewCell 设置属性

iPhone:UIWebview 在 safari 中打开超链接

ios - 没有 UDID 的苹果移动设备管理

iphone - 通过 UIPasteBoard 在短信中粘贴图像

objective-c - Cocoa中窗口的圆角渐变背景

objective-c - 调试帮助书 ("The selected topic is currently unavailable")