2016-01-17 9 views
10

Benim sorunum gerçekten oldukça basittir görüntü bindirme koordinatlarını kaybetmeden aynı anda yakınlaştırmak iki resim bindirmek için Bunun bir amaç imajı olduğunu unutmayın. Bu görüntü (bir görünüm) yakınlaştırılabilir ve şimdiye kadar çok iyi. Haritaya benzer, ancak bunun yerine bir görüntü ile.iOS Swift: Nasıl,</p> <p>evinizin etrafında sokakları ve binaları temsil eden bir arka plan resmi düşünün ...

Resmin üzerine çizilen sokakların üstünde, otomobilleri temsil eden işaretçiler var. Bunlar zamanla hareket edecek ve bu yüzden dinamik olarak hareket edecektir. Otomobilleri görüntünün üzerine doğru yere yerleştirdim, ancak yakınlaştırma/uzaklaştırma yaptığımda otomobiller yerlerinden uzaklaşıyor. Arabaların boyutlarını değiştirmesini istemediğimi, her zaman aynı kalacaklarını unutmayın.

Esasen, Google haritaların üstünde bir harita işaretleyicisine çok benzer, ancak harita yerine arka plan resmim var ve işaretçiler yerine başka görüntülere (otomobillere) sahibim.

Şimdi uygulama için ... Görüntü görüntüsü içeren basit bir ScrollableView var. Yerleşimi korumak istediğim, yakınlaştırma veya uzaklaştırma (veya en azından ana resim kadar olmasa da) için diğer çoklu resimleri bindirmeye çalışıyorum. Bunun üzerinde konum pimleri bulunan bir haritaya benzediğini söyleyebilirim, ama sadece resimleri kullanıyor. Ben Swift bu yapıyor ve son iOS sürümü (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 
    } 
} 

Herhangi bir ipucu çok takdir ediyorum . Ben googled ama örnekler ve hala genel mobil dev gibi görünümleri ve hızlı öğrenme öğrenemedim. Yardımlarınız için teşekkürler.

cevap

3

Pimin değişim merkezini buna göre sahipsiniz. Güncelleştirilmiş kodu kullanın:

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

} 
+0

Teşekkürler! Ancak, önemli bir hatayla ilgili küçük bir sorunla karşılaşmak: Bu satırda bir Optional değeri kaldırılırken beklenmedik bir şekilde sıfır bulundu: pin1ViewCenter = pin1View.center herhangi bir fikir mi? – user2091936

+1

Pin1View öğesinin storyboard'a düzgün bir şekilde bağlı olduğundan emin olun, nil olduğunda olur. –