在我的应用中,我有一个国家/地区列表。我希望用户能够点击其中一个国家/地区(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可见部分放在我收集的坐标上。
答案 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
}