【发布时间】:2023-02-23 02:48:50
【问题描述】:
我试图让我的 UIView 在 Swift 中绕 z 轴旋转。但由于某种原因,旋转轴并不像预期的那样:
rotatedView.layer.anchorPoint = CGPoint(x: 0.5, y: 0.5)
rotatedView.contentMode = .scaleToFill
rotatedView.layer.transform = CATransform3DMakeRotation(rotatedObjectWrapper.object.rotation, 0, 0, 1)
如何让 UIView 绕 z 轴旋转?谢谢。
更新:
我调查后发现,当我使用 Stepper 元素控制旋转时,旋转是围绕 z 轴进行的。对于上下文,委托函数 delegate?.didRotateObject 更新 rotatedObjectWrapper.object.rotation 值。
滑块:
@IBAction func didChangeRotation(_ sender: UISlider) {
delegate?.didRotateObject(to: Double(angleSlider.value))
}
步进器(更新 0.1 弧度):
@IBAction func didChangeStepper(_ sender: Any) {
delegate?.didRotateObject(to: Double(stepper.value))
}
我尝试使用一些动画来改变旋转值,它有点绕 z 轴旋转,同时仍然有奇怪的旋转行为:
UIView.animate(withDuration: 0.5, animations: {
rotatedView.layer.transform = CATransform3DMakeRotation(rotatedObjectWrapper.object.rotation, 0, 0, 1)
})
结果:
更新 2: 我正在尝试这个:
testView = CustomObjectView(image: UIImage(named: "black"))
guard let testView = testView else { return }
testView.frame = CGRect(x: rotatedObject.position.x, y: rotatedObject.position.y, width: rotatedObject.width, height: rotatedObject.height)
testView.layer.transform = CATransform3DMakeRotation(rotatedObjectWrapper.object.rotation, 0, 0, 1)
rotatedView.layer.transform = CATransform3DMakeRotation(rotatedObjectWrapper.object.rotation, 0, 0, 1)
print(testView.layer.frame)
print(rotatedView.layer.frame)
rotatedView.layer.frame = testView.layer.frame
print(rotatedView.layer.frame)
print(")))))))")
testView 仍在正确旋转,而 rotatedView 仍在奇怪地旋转。两者之间的唯一区别是 rotatedView 是从这样的字典中获得的:
guard let rotatedView = objectsToViews[rotatedObjectWrapper] else { return }
我正在尝试一种骇人听闻的方式将 rotatedView.layer.frame 设置为等于 testView.layer.frame 但它不起作用。
【问题讨论】:
-
如果关闭秤以填充会怎样?
-
它没有做任何不同的事情。
-
更新:似乎这种行为是由 UISlider 引起的。上面的旋转是使用 UISlider 改变对象的旋转引起的。当我尝试使用其他 UI 控件/动画旋转它时,旋转似乎工作正常。
标签: ios swift uikit storyboard