【问题标题】:Is it possible to rotate an image in Storyboard or do you have to do it programmatically?是否可以在 Storyboard 中旋转图像,还是必须以编程方式进行?
【发布时间】:2016-09-13 22:43:52
【问题描述】:

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

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

【问题讨论】:

    标签: ios xcode uiimageview autolayout storyboard


    【解决方案1】:

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

    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 中产生以下内容:

    【讨论】:

    • 请注意,它有点“松鼠”。如果您更改角度,Xcode 预览可能会使标签偏离实际放置的位置,等等。另外请注意,设置变换的 z 旋转仅在变换未“倾斜”时有效(拉伸超出正方形。 )
    【解决方案2】:

    是的。您只能在情节提要(界面生成器)中这样做,因为它是与图层相关的属性。

    只需单击您的视图,转到用户定义的运行时属性并添加关键路径,如下所示:

    注意:

    • 值以弧度为单位。例如,将 1.57 旋转 90 度。
    • 您只会在运行时看到更改。

    【讨论】:

      【解决方案3】:

      可以在用户定义的运行时属性中设置layer.transform.rotation.z。检查这个答案:https://stackoverflow.com/a/32150954/2650588

      【讨论】:

        【解决方案4】:

        以编程方式,这样的事情可以提供帮助:

        //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.
        

        更多:apple link

        【讨论】:

        • 最新版swift:myImageView.transform = CGAffineTransform(rotationAngle: CGFloat(M_PI_2 * 3))
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-15
        • 2014-04-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多