在Swift的UIScroll视图中放大原始图像中的坐标

时间:2016-04-18 00:50:31

标签: ios swift uiscrollview

在我的应用中,我有一个国家/地区列表。我希望用户能够点击其中一个国家/地区(A按钮)并在所述地图上放大该国家/地区。我有原始png文件的坐标,但当我设置这些坐标乘以scrollViews帧大小(宽度或高度)除以imageViews图像大小(宽度或高度)到contentOffSet时,它不会将自己定位到我选择的国家。

这是我到目前为止所做的:

对于测试目的,我将坐标设置为变量。这些将根据用户选择的内容而改变。同样出于测试目的,我在视图加载时自动运行了单击阿富汗按钮时运行的代码。

@IBOutlet var scrollView: UIScrollView!
@IBOutlet var mapImageView: UIImageView!

override func viewDidLoad() {

    var xScale = scrollView.frame.size.width / mapImageView.image?.size.width

    var yScale = scrollView.frame.size.height / mapImageView.image?.size.height

    var xCord = 3090
    var yCord = 1280

    scrollView.zoomScale = 3

    scrollView.contentOffset = CGPointMake((x * xScale) - (scrollView.bounds.size.width / 2), (y * yScale) - (scrollView.bounds.size.height / 2))

}

我还希望这个国家可见,所以我使用公式根据国家/地区的大小计算zoomScale。出于测试目的,我设置了scrollView.zoomScale = 3。我打算放大的国家是阿富汗。但请注意,scrollView.zoomScale会根据用户选择的国家/地区进行更改。

这是我正在使用的map。阿富汗以黄色突出显示。

为了澄清一下,scrollView包含一个imageView,它保存了我给上面链接的地图图像。

另外为了澄清,代码必须是任何坐标(来自原始图像文件)和通过公式计算的scrollView.zoomScale的通用代码(上面说的不是代码,而是书面形式)。

我的结论是如何使用从原始图像文件(特别是地图图像)中收集的坐标,并将我的scrollViews可见部分放在我收集的坐标上。

1 个答案:

答案 0 :(得分:0)

我想出了这个问题。我的理论是,在我将内容设置为off之前,内容大小没有足够的时间生成。无论如何,我将设置代码中的内容添加到viewDidApear方法中,然后将zoomScale设置添加到viewDidLoad中。我还将scrollView.contentMode更改为UIViewContentMode.Redraw,并使用setContentOffset添加了一些动画。它适用于任何zoomScale值。这是我的代码......

@IBOutlet var scrollView: UIScrollView!
@IBOutlet var mapImageView: UIImageView!

override func viewDidLoad() {

     scrollView.zoomScale = 5

}

override func viewDidAppear(animated: Bool) {

        let xScale = scrollView.contentSize.width / (mapImageView.image?.size.width)!
        let yScale = scrollView.contentSize.height / (mapImageView.image?.size.height)!

        let xCord:CGFloat = 3090
        let yCord:CGFloat = 1280

        scrollView.setContentOffset(CGPointMake((xCord * xScale) - (scrollView.bounds.width / 2), (yCord * yScale) - scrollView.bounds.height / 2), animated: true)

        scrollView.delegate = self
        scrollView.contentMode = UIViewContentMode.Redraw

}