【问题标题】:How to find X, Y and Rotation value of a UIView after CATransform3D applied应用 CATransform3D 后如何查找 UIView 的 X、Y 和旋转值
【发布时间】:2017-08-28 11:13:03
【问题描述】:

我的屏幕上有一个 UIView。我正在根据用户使用点击和旋转手势的点击移动将 layer.transform 应用到该视图并进行平移和旋转。最后,我想分别通过旋转检索最终的 x 和 y 位置。在此处找不到任何此类帖子以从转换中获取这些信息。有人可以帮忙吗?

这是用于应用转换的代码。

var transform = CATransform3DIdentity
transform = CATransform3DTranslate(transform, displacementX, displacementY, 1.0)
transform = CATransform3DRotate(transform, gesture.rotation, 0, 0, 1.0)

self.currentItem.imageView.layer.transform = transform

【问题讨论】:

  • 你试过这个 _baseLayer valueForKeyPath:@"transform.rotation.z"] 进行旋转
  • 不,我没试过这个。让我先试试。
  • 不,这不返回旋转度数或任何值。它只是 0

标签: ios swift calayer catransform3d


【解决方案1】:

请参考以下代码,

对于应用变换,

let degrees = 90.0
let radians = CGFloat(degrees * Double.pi / 180)
sampleView.layer.transform = CATransform3DMakeRotation(radians, 0.0, 0.0, 1.0)

变换后获取旋转角度,

let radiansFromSampleView = atan2(sampleView.transform.b, sampleView.transform.a)
let DegreesFromRadiansOFSampleView = CGFloat(180 * Double(radiansFromSampleView) / Double.pi)

对于 x 和 y 位置,即使在转换之后,您也可以直接从视图的框架中获取。

希望这会有所帮助。

【讨论】:

  • 对不起兄弟...这总是返回 0。即使应用了旋转。框架原点也不是我当前视图的位置。
  • 实际上上面的代码对我来说很好,这就是我分享的原因,你能分享你的代码块吗。
  • 我没有使用 cgaffinetransform。我正在使用 catransform3d。这就是为什么你的代码没有返回任何东西给我的原因。
猜你喜欢
  • 1970-01-01
  • 2018-03-31
  • 2010-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多