【问题标题】:Rotate (angle) a UIView, using User Defined Runtime Attributes使用用户定义的运行时属性旋转(角度)UIView
【发布时间】:2015-11-08 17:48:43
【问题描述】:

是否可以旋转 UIView 或 UIImageView,比如 10 或 15 度,

实际使用的是用户定义的运行时属性?

还是只能在代码中完成?

(注意 .. 我提到“角度”和“按度数”是为了 google;它可能与“旋转”以改变设备方向的想法混为一谈。)


或者,您是否可以 subclass UIView 以这样的方式公开用户定义的运行时属性,这就是这样做的? (我生锈了:/)

【问题讨论】:

    标签: ios uiview uistoryboard cgaffinetransform


    【解决方案1】:

    您可以为 UIView 对象使用 layer.transform.rotation.z 键路径。
    值必须以弧度设置:

    结果:

    所有转换关键路径都显示在Apple documentation中。

    【讨论】:

    • 我确认它有效 - 我用 UILabel 检查了它。太棒了!
    • 今天有办法做到这一点吗?它在 Xcode 9.4.1 中不适合我。
    • 这不会在 xib 中更新,但如果你运行它会在应用程序中呈现。
    【解决方案2】:

    在此答案How to access User Defined Runtime Attribute from the 'sender' object? 的扩展中,您可以检索运行时值作为以度为单位的 NSNumber,然后执行旋转。触发 IBAction 在界面生成器中当您希望发生旋转时。

    #define RADIANS(degrees) ((degrees * M_PI) / 180.0)
    
    @interface RTFRotatingView : UIView
    @end
    
    @implementation RTFRotatingView
    
    - (IBAction)performRotation:(UIControl *)sender {
        if ([sender respondsToSelector:@selector(keyName)]) {
            NSNumber *degrees = [sender valueForKey:@"keyName"];
            CGAffineTransform rotateTransform = CGAffineTransformRotate(CGAffineTransformIdentity, RADIANS(degrees.doubleValue));
            self.transform = rotateTransform;
        }
    }
    
    @end
    

    【讨论】:

    • Max,我不完全确定这如何解决这里问题中提出的问题??
    • 如另一个问题中所述,您可以将度数(即10)设置为界面构建器中视图的用户定义运行时属性中的值。从那里,通过继承UIView,您可以检索值并执行轮换。
    • Max,你在 UIView 的子类中使用的到底是什么(所以,我模糊地记得它类似于“卸载时”......相当于 VC 中的“viewDidLoad”)...... . 当视图从 IB 拆箱时自动执行此操作?干杯...
    • 哦是的 .. 它是 awakeFromNib。但是请注意此处评论中来自 Joe Blow 的警告 ...stackoverflow.com/a/6927658/294884 我不知道您是否可以在 awakeFromNib 中进行 CGAffineTransformRotate .. 它可能就像动画一样,您不能这样做。
    • @JoeBlow 试试看,否则在计时器上运行它以在 x 秒后执行旋转。或者见stackoverflow.com/a/10167734/556479
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    • 2015-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多