现在,我具有以下视图层次结构:
我的视图层次结构有点复杂,因为我既需要缩放也要旋转,并且还需要保持地图和箭头的位置关系,我已经研究了很长时间了,并且找到了这种解决方案。
现在,我的问题是Arrow Image View
缩放时如何始终保持在屏幕中央?
这是我的一些代码:
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return Container For Scale View
}
func scrollViewDidZoom(_ scrollView: UIScrollView) {
let imageViewSize = MapImageView.frame.size
let scrollViewSize = scrollView.bounds.size
let verticalPadding = imageViewSize.height < scrollViewSize.height ? (scrollViewSize.height - imageViewSize.height) / 2 : 0
let horizontalPadding = imageViewSize.width < scrollViewSize.width ? (scrollViewSize.width - imageViewSize.width) / 2 : 0
scrollView.contentInset = UIEdgeInsets(top: verticalPadding, left: horizontalPadding, bottom: verticalPadding, right: horizontalPadding)
}
在这里你需要一些数学
当缩放容器视图按照缩放比例变大时,您需要将center
点转换为相对于超级UIView
假设您的“容器比例视图”为 viewBase
var center = self.view.center
之后,将您的图像点转换为相同
let convertedImagePoint = self.viewBase.convert(imageView.center, to: self.view)
现在获取Difff
let diff = convertedImagePoint.y - center.y
DispatchQueue.main.async {
self.scrollView1.contentOffset.y += diff
}
希望对你有帮助
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句