ios - 在 Swift 中的 ScrollView 中放大原始图像的坐标

标签 ios swift uiscrollview

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

这是我目前所拥有的:

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

@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,其中包含我在上面提供的链接的 map 图像。

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

我最后的问题是如何使用我从原始图像文件(特别是 map 图像)收集的坐标,并将我的 scrollViews 可见部分定位在我收集的坐标上。

最佳答案

我想通了这个问题。我的理论是,在我设置内容偏移量之前,内容大小没有足够的时间生成。无论如何,我将内容偏移代码添加到 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

}

关于ios - 在 Swift 中的 ScrollView 中放大原始图像的坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36683868/

相关文章:

ios - UIView 不会垂直滚动到 UIScrollView 内

ios - 当 subview 显示在 ScrollView 上方时,它不会滚动

ios - 如何识别正在使用麦克风的框架或依赖项

ios - 本地化 siri 捐赠的快捷方式

ios - 在应用程序启动/恢复时检测在线状态 - 网络可能会延迟启动?

macos - 无法在 xcode6 beta 6 osx swift 项目 : (Error in auto-import: failed to get module ('po' from AST context) 中打印对象 '__ObjC'

ios - Instagram api 错误错误请求 ios

swift - 以编程方式设置 UITextField 占位符颜色

ios - Swift Heart Rate Variability 结果从 ms 到 double 的转换

swift - scrolltoitematindexpath 总是返回到相同的位置