如何解决您可以使用 KeyPath 设置 CGAffineTransform 的旋转吗?
Core Animation 中有 Key-Value Coding 扩展,如 here 所述,可让您设置图层的 z 旋转(或绕 3 个 3D 轴中的任何一个轴的旋转)。
如果您想向视图添加一个 @IBInspectable
属性以方便您在 Interface Builder 中设置它的旋转角度,这很方便,正如我在 this SO answer 中演示的那样。
该代码如下所示:
@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")
}
}
但是,如果图层的变换是“倾斜的”,角度变换将无法正常工作。
UIViews 有一个属性 transform
,类型为 CGAffineTransform
。这是一个 3x3 变换矩阵,它只对视图应用二维变换。
如果我可以将旋转应用于视图现有的 transform
属性,而不是将 z 旋转应用于视图支持层的变换,那会更清晰。但是,我无法弄清楚如何使用 keyPath
更改视图变换的旋转角度。
如果系统的键值编码扩展不公开该属性,则可能无法实现。或者,将 CGAffineTransform
的旋转角度设置为特定角度的数学方法是什么? (我不想向现有变换附加更多旋转。我也不想通过将旋转应用于标识变换来计算变换。我想采用视图的现有变换并将其旋转值替换为新的旋转值,就像上面的代码对图层的 CATransform3D
所做的一样。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。