2016-01-17 9 views
10

Mein Problem ist ziemlich einfach wirklich ...iOS Swift: Wie zwei Bilder zu überlagern, das Bild überlagern, ohne zu verlieren Koordinaten zur gleichen Zeit vergrößern

ein Hintergrundbild Stellen Sie sich vor, die die Straßen und Gebäude rund um Ihr Haus steht, Beachten Sie, dass dies ein speziell erstelltes Bild ist. Dieses Bild (eine Ansicht) ist zoombar und so weit so gut. Ähnlich wie Karte, aber stattdessen mit einem Bild.

Jetzt Bild, dass oben auf den Straßen auf dem Bild gezeichnet gibt es Markierungen für Autos. Diese werden sich im Laufe der Zeit bewegen und sich daher dynamisch bewegen. Ich habe die Autos erfolgreich an der richtigen Stelle auf dem Bild platziert, aber wenn ich heranzoome, bewegen sich die Autos fehl am Platz. Beachten Sie, dass ich nicht möchte, dass die Autos in der Größe ändern, sie werden immer gleich bleiben.

Im Wesentlichen sehr ähnlich zu einem Kartenmarker auf Google Maps, aber anstelle der Karte habe ich ein Hintergrundbild und anstelle der Markierungen habe ich andere Bilder (die Autos).

Jetzt für die Implementierung ... Ich habe eine einfache ScrollableView, die eine Bildansicht enthält. Ich versuche, mehrere andere Bilder zu überlagern, die ich zwar platzieren, aber nicht vergrößern oder verkleinern möchte (oder zumindest nicht so viel wie das Hauptbild). Ich würde sagen, dass es ähnlich wie eine Karte ist, auf der sich Pins befinden, aber es sind nur Bilder. Ich tue dies in Swift und die neueste iOS-Version (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 
    } 
} 

Irgendwelche Tipps zu schätzen. Ich habe es gegooglet, konnte aber keine Beispiele finden und trotzdem Ansichten und schnelle sowie allgemeine mobile Devs lernen. Danke für Ihre Hilfe.

Antwort

3

Sie haben das Änderungszentrum des Pins entsprechend. Verwenden Sie diesen aktualisierten Code:

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

Vielen Dank! Aber ein kleines Problem mit einem fatalen Fehler: unerwartet gefunden Null beim Entpacken ein optionaler Wert in dieser Zeile: pin1ViewCenter = pin1View.center irgendwelche Ideen? – user2091936

+1

Vergewissern Sie sich, dass pin1View im Storyboard richtig verbunden ist, wenn es nicht aktiv ist. –

Verwandte Themen