【问题标题】:How to make image view always be center of screen when scale using scroll view?使用滚动视图缩放时如何使图像视图始终位于屏幕中心?
【发布时间】:2017-07-18 04:12:32
【问题描述】:

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

  • 查看
    • 滚动视图
      • 比例视图容器
        • 用于旋转视图的容器
          • 地图图像视图
            • 箭头图像视图

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

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

【问题讨论】:

    标签: ios swift view scrollview


    【解决方案1】:

    这里你需要一些数学

    由于您的缩放容器视图根据您的缩放比例更大,您需要将 center 点相对于超级 UIView 进行转换

    假设您的 Container For Scale View 是 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
            }
    

    希望对你有帮助

    【讨论】:

    • 谢谢!!真的很有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多