iOS Swift:如何叠加两个同时放大的图像而不会丢失叠加图像的坐标

use*_*936 10 ios swift

我的问题非常简单......

想象一下背景图像代表你家周围的街道和建筑物,请注意这是一个专门构建的图像.这个图像(一个视图)是可缩放的,到目前为止一直很好.与地图相似,但用图像代替.

现在,在图像上绘制的街道顶部的图像上有代表汽车的标记.这些将随着时间的推移而移动,因此将动态移动.我已经成功地将汽车放置在图像上的正确位置,但是当我放大/缩小汽车时,汽车会移动到位.请注意,我不希望汽车的尺寸发生变化,它们将始终保持不变.

基本上,非常类似于谷歌地图顶部的地图标记,但不是地图我有一个背景图片而不是标记我有其他图像(汽车).

现在实现...我有一个简单的ScrollableView,它包含一个图像视图.我试图覆盖其他多个图片,我想保持放置但不放大或缩小(或至少没有主图片那么多).我会说它类似于地图上有定位销,但它只是使用图片.我在Swift中做这个和最新的iOS版本(9x)

import UIKit

class ViewController: UIViewController, UIScrollViewDelegate
{
    @IBOutlet weak var scrollView: UIScrollView!
    @IBOutlet weak var imageView: UIImageView!
    @IBOutlet weak var pin1View: UIImageView!
    @IBOutlet weak var pin2View: UIImageView!

    override func viewDidLoad()
    {
        super.viewDidLoad()
        self.scrollView.minimumZoomScale = 1.0;
        self.scrollView.maximumZoomScale = 10.0;



    }

    override func didReceiveMemoryWarning()
    {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView?
    {
        let pin1_X = self.pin1View.frame.origin.x
        let pin2_Y = self.pin2View.frame.origin.y
        //I guess I need to do something here but not sure
        return self.imageView
    }   
}
Run Code Online (Sandbox Code Playgroud)

任何提示非常感谢.我用谷歌搜索但是找不到示例,仍然学习视图和swift以及一般的移动开发.谢谢你的帮助.

Aru*_*aya 3

您可以相应地更改引脚的中心。使用此更新的代码:

class ViewController: UIViewController, UIScrollViewDelegate
{
    @IBOutlet weak var scrollView: UIScrollView!
    @IBOutlet weak var imageView: UIImageView!
    @IBOutlet weak var pin1View: UIImageView!
    @IBOutlet weak var pin2View: UIImageView!
    var pin1ViewCenter : CGPoint = CGPointZero
    var pin2ViewCenter : CGPoint = CGPointZero

    override func viewDidLoad()
    {
        super.viewDidLoad()
        self.scrollView.scrollEnabled = true
        self.scrollView.minimumZoomScale = 1.0
        self.scrollView.maximumZoomScale = 10.0

        pin1ViewCenter = pin1View.center
        pin2ViewCenter = pin2View.center

        self.scrollView.contentSize = self.imageView.frame.size
    }


    override func didReceiveMemoryWarning()
    {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView?
    {
        return self.imageView
    }

    func scrollViewDidZoom(scrollView: UIScrollView) {

        let scaleAffineTransform = CGAffineTransformScale(CGAffineTransformIdentity, scrollView.zoomScale, scrollView.zoomScale)
        var translatedPoint = CGPointApplyAffineTransform(pin1ViewCenter, scaleAffineTransform)
        pin1View.transform = CGAffineTransformTranslate(CGAffineTransformIdentity, translatedPoint.x - pin1ViewCenter.x , translatedPoint.y - pin1ViewCenter.y)
        translatedPoint = CGPointApplyAffineTransform(pin2ViewCenter, scaleAffineTransform)
        pin2View.transform = CGAffineTransformTranslate(CGAffineTransformIdentity, translatedPoint.x - pin2ViewCenter.x, translatedPoint.y - pin2ViewCenter.y)
    }

    func scrollViewDidEndZooming(scrollView: UIScrollView, withView view: UIView?, atScale scale: CGFloat) {
        let scaleAffineTransform = CGAffineTransformScale(CGAffineTransformIdentity, scale, scale)
        scrollView.contentSize = CGSizeApplyAffineTransform(self.imageView.bounds.size, scaleAffineTransform)
    }

}
Run Code Online (Sandbox Code Playgroud)