在Storyboard中旋转图片是否可行,还是必须通过编程实现?

9

假设您有一个三角形图像,想在不同的角度使用它(例如180度、90度)。

在Storyboard中旋转三角形图像是否可行,还是需要以编程的方式实现?

4个回答

11

您可以创建一个IBDesignableIBInspectableUIView子类,该子类具有旋转角度属性,并对其包含的图像应用变换。

IBInspectable允许您在IB的“属性检查器”中公开自定义视图的自定义属性。

将视图设置为IBDesignable允许您在IB中预览自定义视图对象。

编辑:

这是一个非常古老的帖子,但我决定实现一个允许旋转的自定义UIView,就像我所描述的那样。由于现在是2021年,我使用了Swift:

@IBDesignable class RotatableView: UIView {

    @objc @IBInspectable var rotationDegrees: Float = 0 {
        didSet {
            print("Setting angle to \(rotationDegrees)")
            let angle = NSNumber(value: rotationDegrees / 180.0 * Float.pi)
            layer.setValue(angle, forKeyPath: "transform.rotation.z")
        }
    }
}

这将在Interface Builder中呈现如下:

enter image description here


请注意,这有点“神经质”。如果您更改角度,则Xcode预览可能会将标签偏离实际应放置的位置等。还要注意,仅当变换未“扭曲”(拉伸不成正方形)时,设置变换的z旋转才有效。 - Duncan C
我该如何在LaunchScreen上实现这个功能?新视图应该如何添加到其中? - 12944qwerty
你无法修改启动屏幕。这些由系统在代码执行之前显示。启动屏幕只会显示静态图像。 - Duncan C
我建议不要在旧答案的评论中添加新问题。你应该创建一个新问题。 - Duncan C
抱歉,我决定在主屏幕上使用。我复制并粘贴了IBinspectable,但在xcode的我的imageview上看不到designable。当我运行它时,出于某种原因它停留在启动屏幕上。(这是一个回答中的问题,所以我认为不需要一个新问题,对吗?)我还新添加了一个UIView来查看是否在那个视图上,但也没有。 - 12944qwerty

6
可以。你只能在Storyboard(Interface Builder)中进行此操作,因为它涉及到图层相关的属性。

只需点击你的视图,进入“用户定义的运行时属性”,然后添加键路径即可:

layer.transform.rotation.z 1.57

enter image description here

注意:

  • 数值以弧度为单位。例如,要旋转90度,请输入1.57。
  • 只有在运行时才能看到变化。

5

3
以程序方式,类似这样的东西可以帮助:
//rotate rect
    myImageView.transform = CGAffineTransformMakeRotation(M_PI_2); //90 degree//rotation in radians

//For 180 degree use M_PI

或者制作一个像这样的宏:
#define DEGREES_TO_RADIANS(degree) (M_PI * (degree) / 180.0)

并且使用以下方法:
CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(90));//here may be anything you want 45/90/180/270 etc.

更多信息: 苹果链接


最新版本的 Swift:myImageView.transform = CGAffineTransform(rotationAngle: CGFloat(M_PI_2 * 3)) - Ahmed Khedr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接