无限旋转图像背景UIImageView

时间:2012-03-15 08:11:56

标签: iphone objective-c ios uiimageview

我想从UIImageView扩展一个类,它将无限旋转宇宙图像。所以我可以简单地将此图像视图作为其他UI元素的背景视图。

此处有3个问题:

  1. 这是从UIImageview课程扩展的正确方法。
  2. 如何保持旋转无限,作为背景,当把它放到其他视图中时,我不需要编写额外的代码行。
  3. 我写了一个粗略的原型,当我将其作为背景放入其他视图时,此视图中的所有UI元素都随图像一起旋转。

3 个答案:

答案 0 :(得分:3)

假设您有一个UIImageView并在其上分配一个图像并命名为myImgView。在viewDidLoad上,将代码添加为:

[UIView beginAnimations:nil context:nil];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationRepeatCount:MAXFLOAT];
myImgView.transform = CGAffineTransformMakeRotation(M_PI);
[UIView commitAnimations];

它对我来说就像一个魅力。

答案 1 :(得分:2)

  1. 扩展UIImageview类没有任何问题。
  2. 创建旋转动画并设置重复开启。
  3. 不要在旋转图像上添加元素。 (在基本视图中添加元素。在索引0处插入旋转的imageview。)

答案 2 :(得分:1)

来自UIView Class Reference

  

优化UIImageView类以将其图像绘制到显示器。 UIImageView不会调用drawRect:一个子类。如果您的子类需要自定义绘图代码,建议您使用UIView作为基类。

目前,UIImageView子类确实有效,特别是如果它们不干扰绘图代码。如果未来的iOS更新破坏了您的子类,请不要向苹果抱怨。编写自己的UIView子类以显示图像非常容易。如果您已有适当的图片,请考虑将其放在CALayer contents中,而不是实施UIView drawRect方法。


通过更改UIView transform(类型为CGAffineTransform)的轮换始终采用最短路径。这意味着270度的顺时针旋转被动画为90度的逆时针旋转,并且360度的任何倍数都将无效。如果获得视图的图层,则可以获得360度旋转,并为CALayer transform设置动画(类型为CATransform3D)。见Can I use CGAffineTransformMakeRotation to rotate a view more than 360 degrees?

为了让动画无休止地重复,CAMediaTiming Protocol Reference建议将repeatCount设为HUGE_VALF