2016-01-17 13 views
10

Il mio problema è abbastanza semplice, in realtà ...iOS Swift: come sovrapporre due immagini che ingrandire allo stesso tempo senza perdere le coordinate di sovrapposizione dell'immagine

Immaginate un'immagine di sfondo che rappresenta le strade e gli edifici intorno alla vostra casa, si noti che questa è un'immagine appositamente costruita. Questa immagine (una vista) è zoomabile e finora così buona. Simile alla mappa, ma con un'immagine.

Ora immagine che in cima alle strade disegnate sull'immagine ci sono indicatori che rappresentano le auto. Questi si sposteranno nel tempo e quindi si muoveranno dinamicamente. Ho posizionato con successo le auto nel posto giusto sull'immagine, ma quando eseguo lo zoom in/out le auto si spostano fuori luogo. Nota che non voglio che le auto cambino di dimensioni, rimarranno sempre le stesse.

In sostanza, molto simile a un indicatore di mappa sopra le mappe di google, ma invece della mappa ho un'immagine di sfondo e invece dei marcatori ho altre immagini (le auto).

Ora per l'implementazione ... Ho un semplice ScrollableView che contiene una vista immagine. Sto cercando di sovrapporre altre immagini multiple che voglio mantenere il posizionamento ma non lo zoom in avanti o indietro (o almeno non tanto quanto l'immagine principale). Direi che è simile a una mappa che ha perni di posizione su di esso, ma è solo usando le immagini. Sto facendo questo a Swift e l'ultima versione di 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 
    } 
} 

Eventuali suggerimenti molto apprezzato. L'ho cercato su google, ma non sono riuscito a trovare esempi e ancora a imparare le visualizzazioni e gli sviluppatori di dispositivi mobili. Grazie per il vostro aiuto.

risposta

3

Hai il centro di cambio del pin di conseguenza. Usa questo codice aggiornato:

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

Grazie! Ma avendo un piccolo problema con un errore fatale: trovato in modo non casuale mentre si estraeva un valore facoltativo su questa linea: pin1ViewCenter = pin1View.center qualche idea? – user2091936

+1

Assicurati che pin1View sia collegato correttamente nello storyboard, accade quando è nullo. –

Problemi correlati