在Swift的UIScroll视图中放大原始图像中的堇青石



在我的应用程序中,我有一个国家列表。我希望用户能够点击其中一个国家(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))
}

我也希望这个国家是可见的,所以我使用一个公式来根据国家的大小计算缩放比例。出于测试目的,我设置了scrollView.zoomScale = 3。我要放大的国家是阿富汗。但请记住,scrollView.zoomScale将根据用户选择的国家而变化。

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

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

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

总之,我的问题是如何使用我从原始图像文件(特别是地图图像)中收集的坐标,并将我的滚动视图可见部分定位在我收集的坐标上。

我发现了这个问题。我的理论是,在我设置内容之前,内容大小没有足够的时间生成。无论如何,我在viewDidApear方法中添加了内容偏移代码,然后在viewDidLoad中添加了zoomScale设置。此外,我将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
}

最新更新