使用滚动视图缩放时,如何使图像视图始终位于屏幕中心?

时间:2017-07-18 04:12:33

标签: ios swift view scrollview

现在我有以下视图层次结构:

  • 查看
    • 滚动视图
      • 规模视图的容器
        • 旋转视图的容器
          • 地图图片视图
            • 箭头图片视图

我的视图层次结构有点复杂,因为我需要缩放和旋转,并且我还需要保持地图和箭头的位置关系,我已经解决了很长时间并找到了这个解决方案。

现在我的问题是当我缩放时如何将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)
}

1 个答案:

答案 0 :(得分:2)

这里你需要一些数学

由于您的缩放容器视图根据缩放比例较大,因此需要将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
        }

希望有帮助