2012-03-15 124 views
0

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

3个问题在这里:

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

回答

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

谢谢你,帮忙。我会检查我的代码的细节。 – icespace 2012-03-15 09:03:00

+0

@icespace欢迎:) – Vignesh 2012-03-15 09:03:43

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]; 

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

+0

谢谢。你是对的,它像一个魅力。 8-) – icespace 2012-04-19 01:34:45

1

UIView Class Reference

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

目前,UIImageView子类做的工作,特别是如果他们不干扰绘图代码。如果未来的iOS更新会破坏您的子类,请不要抱怨苹果。很容易编写自己的UIView子类来显示图像。如果您已经有适当的图形,可以考虑将它放在CALayercontents中,而不是实现UIView drawRect方法。


轮作通过改变UIView transform(其为CGAffineTransform类型的)始终以最短路径。这意味着270度的顺时针旋转是90度逆时针旋转的动画,360度的任何倍数都不会产生任何影响。如果您获得视图的图层并且设置了动画CALayer transform(其类型为CATransform3D),则您可以罐头获得360度旋转。请参阅Can I use CGAffineTransformMakeRotation to rotate a view more than 360 degrees?

为了使动画不断重复,CAMediaTiming Protocol Reference建议将repeatCount设置为HUGE_VALF

+0

谢谢你解释。我复制了hieund的代码(请参阅上面的注释)。利用iOS提供的API总是正确的方式。再次感谢。 – icespace 2012-04-19 01:38:51