使用滚动视图缩放时如何使图像视图始终位于屏幕中心?
How to make image view always be center of screen when scale using scroll view?
现在我有以下视图层次结构:
- 查看
- 滚动视图
- 比例视图的容器
- 旋转视图的容器
- 地图图片查看
- 箭头图像视图
我的视图层次结构有点复杂,因为我需要缩放和旋转,而且我还需要保持地图和箭头的位置关系,我已经研究了很长时间并找到了这个解决方案。
现在我的问题是如何在缩放时让 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)
现在获取差异
let diff = convertedImagePoint.y - center.y
DispatchQueue.main.async {
self.scrollView1.contentOffset.y += diff
}
希望对您有所帮助
现在我有以下视图层次结构:
- 查看
- 滚动视图
- 比例视图的容器
- 旋转视图的容器
- 地图图片查看
- 箭头图像视图
- 地图图片查看
- 旋转视图的容器
- 比例视图的容器
- 滚动视图
我的视图层次结构有点复杂,因为我需要缩放和旋转,而且我还需要保持地图和箭头的位置关系,我已经研究了很长时间并找到了这个解决方案。
现在我的问题是如何在缩放时让 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)
现在获取差异
let diff = convertedImagePoint.y - center.y
DispatchQueue.main.async {
self.scrollView1.contentOffset.y += diff
}
希望对您有所帮助