【问题标题】:Infinite rotating image background UIImageView无限旋转图片背景 UIImageView
【发布时间】:2012-03-15 08:11:55
【问题描述】:

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

这里有 3 个问题:

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

【问题讨论】:

    标签: iphone objective-c ios uiimageview


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:
      1. 扩展 UIImageview 类没有错。
      2. 创建旋转动画并设置重复打开。
      3. 不要在旋转图像上添加元素。 (在基础视图中添加元素。在索引 0 处插入旋转图像视图)。

      【讨论】:

        【解决方案3】:

        来自UIView Class Reference

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

        目前,UIImageView 子类确实有效,尤其是在它们不干扰绘图代码的情况下。如果未来的 iOS 更新破坏了您的子类,请不要向苹果抱怨。编写自己的 UIView 子类来显示图像很容易。如果你已经有了合适的图形,可以考虑把它放在CALayercontents中,而不是实现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

        【讨论】:

        • 感谢您的解释。我从 hieund 复制了代码(见上面的评论)。利用 iOS 提供的 API 始终是正确的方法。再次感谢。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多