我有一个包含图像视图的滚动视图设置。 此滚动视图正在处理我的缩放和滚动。
我正在从设备传感器读取用户的当前航向,并相应地旋转图像。
我遇到的问题是试图维持“单一真相”转换。
如果图像已经被捏/缩放,然后我进行旋转,则效果很好。这是我的方法。
// Keep track of values I want
struct ImageTrasform {
var rotate: CGFloat = 0.0
var scale: CGFloat = 1.0
}
// store the last zoom
func scrollViewDidZoom(_ scrollView: UIScrollView) {
viewModel.transform.scale = scrollView.zoomScale
}
// Update scale value when zooming
func updateTransform() {
UIView.animate(withDuration: 0.5, animations: {
let ts = CGAffineTransform(scaleX: self.viewModel.transform.scale, y: self.viewModel.transform.scale)
let t1 = CGAffineTransform(rotationAngle: self.viewModel.transform.rotate)
let t = ts.concatenating(t1)
self.imageView.transform = t
})
}
// Rotate to Users Heading
private func updateRotation(angle: CGFloat)
{
viewModel.transform.rotate = angle
updateTransform()
}
我的问题是随后进行的任何缩放尝试都将旋转变换重置为0。
如何在不重置任何内容的情况下保持滚动视图的所有出色缩放和滚动并将所需的旋转应用于滚动视图内容?