2016-01-17 6 views
10

मेरे समस्या बहुत बहुत आसान है के निर्देशांक खो बिना दो छवियों कि एक ही समय में ज़ूम इन ओवरले करने के लिए ...आईओएस स्विफ्ट: कैसे छवि डालने

एक पृष्ठभूमि छवि है कि सड़कों और इमारतों अपने घर के आसपास का प्रतिनिधित्व करता है की कल्पना कीजिए, ध्यान दें कि यह एक उद्देश्य निर्मित छवि है। यह छवि (एक दृश्य) ज़ूम करने योग्य और अब तक बहुत अच्छी है। मानचित्र के समान, लेकिन इसके बजाय एक छवि के साथ।

अब छवि जो छवि पर खींची गई सड़कों के शीर्ष पर कारों का प्रतिनिधित्व करने वाले मार्कर हैं। ये समय के साथ आगे बढ़ेगा और इसलिए गतिशील रूप से आगे बढ़ेगा। मैंने कारों को छवि पर सही स्थान पर सफलतापूर्वक रखा है, लेकिन जब मैं कारों को ज़ूम इन/आउट करता हूं तो जगह से बाहर निकलता है। ध्यान दें कि मैं नहीं चाहता कि कारें आकार में बदल जाएंगी, वे हमेशा वही रहेंगे।

अनिवार्य रूप से, Google नक्शे के शीर्ष पर एक मानचित्र मार्कर के समान ही है, लेकिन मानचित्र के बजाय मेरे पास पृष्ठभूमि चित्र है और मार्करों की बजाय मेरे पास अन्य छवियां हैं (कारें)।

अब कार्यान्वयन के लिए ... मेरे पास एक साधारण स्क्रॉल करने योग्य दृश्य है जिसमें एक छवि दृश्य है। मैं अन्य कई चित्रों को ओवरले करने की कोशिश कर रहा हूं जिन्हें मैं प्लेसमेंट रखना चाहता हूं लेकिन ज़ूम इन या आउट नहीं (या कम से कम मुख्य तस्वीर जितना नहीं)। मैं कहूंगा कि यह एक मानचित्र के समान है जिसमें उस पर स्थान पिन हैं, लेकिन यह सिर्फ चित्रों का उपयोग कर रहा है। मैं स्विफ्ट में यह कर रहा हूं और नवीनतम 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 
    } 
} 

कोई युक्ति बहुत सराहना। मैंने इसे गुगल किया लेकिन उदाहरण नहीं मिला और अभी भी विचारों और तेजी से सीखने के साथ-साथ सामान्य मोबाइल देव भी नहीं मिला। आपकी मदद के लिए धन्यवाद।

उत्तर

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

} 
+0

धन्यवाद! लेकिन घातक त्रुटि के साथ मामूली समस्या होने के कारण: इस लाइन पर वैकल्पिक मूल्य को अनदेखा करते समय अनपेक्षित रूप से शून्य पाया गया: pin1ViewCenter = pin1View.center किसी भी विचार? – user2091936

+1

सुनिश्चित करें कि पिनबोर्ड दृश्य स्टोरीबोर्ड में ठीक से जुड़ा हुआ है, जब यह शून्य होता है तब होता है। –

संबंधित मुद्दे