使用用户定义的运行时属性旋转(角度)UIView

12

是否可以使用用户定义的运行时属性旋转UIView或UIImageView,比如10或15度?

实际上可以使用用户定义的运行时属性吗?还是只能在代码中完成?

(注意... 我提到“角度”和“度数”是为了方便谷歌搜索;它可能会与设备方向变化的“旋转”概念混淆。)


或者您可以通过子类化UIView的方式,使得一个用户定义的运行时属性被公开,可以完成这个功能?(我有点生疏 :/)

2个回答

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

输入图像描述

结果:

输入图像描述

所有转换键路径均在Apple文件中介绍。


1
我确认它已经工作了 - 我用UILabel检查过了。太棒了! - Fattie
1
今天有没有办法做到这一点?在Xcode 9.4.1中对我不起作用。 - Jeremiah
1
这个在xib中不会更新,但是如果你运行它,它会在应用程序中呈现。 - Stunner

4

除了这个答案如何从“sender”对象访问用户定义的运行时属性?,你可以将运行时值作为度数的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,我不完全确定这如何解决这里提出的问题? - Fattie
如在其他问题中提到的那样,您可以在界面构建器中为视图设置度数值,例如 10,作为用户定义的运行时属性。然后,通过对 UIView 进行子类化,您可以检索该值并执行旋转操作。 - max_
Max,你在UIView的子类中使用什么调用来自动执行视图从IB中取消勾选时的操作(我模糊地记得它类似于“未加载”..相当于VC中的“viewDidLoad”)?谢谢... - Fattie
哦,没错...它是awakeFromNib。但请注意Joe Blow在这里的评论中的警告...https://dev59.com/bWw05IYBdhLWcg3w_Guw#6927658。我不知道你是否可以在awakeFromNib中使用CGAffineTransformRotate...它可能像动画一样,无法实现。 - Fattie
@JoeBlow 试一下,否则可以在定时器上运行,在 x 秒后执行旋转。或者参见 https://dev59.com/nmkw5IYBdhLWcg3wDWTL#10167734。 - max_

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