Подтвердить что ты не робот

IOS Swift: как наложить два изображения, которые увеличиваются в одно и то же время, не теряя координаты наложения изображения

Моя проблема довольно проста на самом деле...

Представьте себе фоновое изображение, представляющее улицы и здания вокруг вашего дома, обратите внимание, что это созданное изображение цели. Это изображение (вид) масштабируемо и пока настолько хорошо. Подобно карте, но с изображением.

Теперь изображение, которое на вершине улиц, нарисованных на изображении, есть маркеры, представляющие автомобили. Они будут двигаться со временем и, следовательно, будут двигаться динамически. Я успешно разместил автомобили в нужном месте на изображении, но когда я увеличиваю/уменьшаю, автомобили уходят с места. Обратите внимание: я не хочу, чтобы автомобили менялись по размеру, они всегда останутся прежними.

По существу, очень похож на маркер карты поверх карт Google, но вместо карты у меня есть фоновое изображение, а вместо маркеров у меня есть другие изображения (автомобили).

Теперь для реализации... У меня есть простой 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
    }   
}

Любые советы очень ценятся. Я googled, но не мог найти примеры и все еще изучать взгляды и быстро, а также общие мобильные устройства. Благодарим за помощь.

4b9b3361

Ответ 1

У вас есть центр изменения штыря соответственно. Используйте этот обновленный код:

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)
    }

}