2016-10-29 6 views
12

स्केल करने और स्थानांतरित करने के लिए एनीमेशन स्क्रीन के बीच में स्थित एक UIView है। जब उपयोगकर्ता एक बटन दबाता है, तो मैं इसे स्क्रीन के शीर्ष के ऊपर ले जाना चाहता हूं क्योंकि यह इसके आकार के लगभग पांचवें हिस्से तक गिर जाता है।UIView (स्विफ्ट)

UIView.animateWithDuration(0.7) {() -> Void in 
      self.main.transform = CGAffineTransformMakeScale(0.2, 0.2) 
      self.main.transform = CGAffineTransformMakeTranslation(0, -250) 
     } 

लेकिन किसी कारण से, कि केवल देखने मापता है:

मैं इस कोशिश की है। मैंने इसे एनिमेट में रखने की भी कोशिश की है। अवधि:

self.main.frame = CGRectMake(self.view.frame.width/2 - 10, 50, 50, 50) 

मैं दोनों एनिमेशन को काम करने के लिए कैसे प्राप्त कर सकता हूं?

उत्तर

5

जो जवाब गए रूप में उसकी GIF का वर्णन करता है लेकिन यह वास्तव में यह के बाद से आपके प्रश्न का उत्तर नहीं है करता है का अनुवाद करता है तो दृश्य को स्केल करता है (जैसा कि एक ही समय में अनुवाद और स्केलिंग दोनों का विरोध करता है)। आपकी समस्या यह है कि आप अपने एनीमेशन ब्लॉक में व्यू के ट्रांसफॉर्म को सेट कर रहे हैं और तुरंत उस मान को दूसरे ट्रांसफॉर्म के साथ ओवरराइट कर रहे हैं। एक ही समय में अनुवाद और स्केल दोनों प्राप्त करने के लिए, आपको कुछ ऐसा चाहिए:

@IBAction func animateButton(_ sender: UIButton) { 
    let originalTransform = self.main.transform 
    let scaledTransform = originalTransform.scaledBy(x: 0.2, y: 0.2) 
    let scaledAndTranslatedTransform = scaledTransform.translatedBy(x: 0.0, y: -250.0) 
    UIView.animate(withDuration: 0.7, animations: { 
     self.main.transform = scaledAndTranslatedTransform 
    }) 
} 
+0

में आपके ब्रैकेट के साथ समस्या समाधान के लिए धन्यवाद। लेकिन अनुवाद मेरे विचार को अपेक्षाकृत आगे बढ़ाता है। मैं इसे कैसे स्थानांतरित कर सकता हूं x = 100 y = 100 स्थिति की तरह स्क्रीनको-समन्वय ठीक करें ??? मुझे एहसास है कि अनुवादित स्थिति आपकी स्थिति को वर्तमान स्थिति के सापेक्ष स्थानांतरित करती है। –

+0

@ एमडी सुलेमान आपको अपने गंतव्य एक्स और वाई निर्देशांक और आपके UIView के निर्देशांक के बीच के अंतर की गणना करने की आवश्यकता होगी, फिर उस राशि से अपना UIView का अनुवाद करें। यदि आप एक कोड उदाहरण देखना चाहते हैं, तो एक और प्रश्न खोलने के लिए स्वतंत्र महसूस करें और मुझे यहां लिंक करें :) – WongWray

18

आप स्विफ्ट में कई तरीकों से मूल UIView animation प्राप्त कर सकते हैं। नीचे दिए गए कोड सिर्फ एक सरल दृष्टिकोण ... है

class ViewController: UIViewController { 

@IBOutlet weak var animationButton: UIButton! 
@IBOutlet weak var myView: UIView! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // I added seperate colour to UIView when animation move from one animation block to another.So, You can get better understanding how the sequence of animation works. 
    self.myView.backgroundColor = .red 
} 

@IBAction func animateButton(_ sender: UIButton) { 

    UIView.animate(withDuration: 0.5, delay: 0.0, options: UIViewAnimationOptions.curveEaseIn, animations: { 
     //Frame Option 1: 
     self.myView.frame = CGRect(x: self.myView.frame.origin.x, y: 20, width: self.myView.frame.width, height: self.myView.frame.height) 

     //Frame Option 2: 
     //self.myView.center = CGPoint(x: self.view.frame.width/2, y: self.view.frame.height/4) 
     self.myView.backgroundColor = .blue 

     },completion: { finish in 

    UIView.animate(withDuration: 1, delay: 0.25,options: UIViewAnimationOptions.curveEaseOut,animations: { 
     self.myView.backgroundColor = .orange  
     self.myView.transform = CGAffineTransform(scaleX: 0.25, y: 0.25) 

     self.animationButton.isEnabled = false // If you want to restrict the button not to repeat animation..You can enable by setting into true 

     },completion: nil)}) 

     } 
    } 

आउटपुट:

enter image description here

+0

हैलो। मैंने यह किया है लेकिन इस एनीमेशन को बनाने के बाद mu uiimageview को कम किया गया है –

+0

@ एमडी सुलेमान ने पोस्ट के पूरे विचार को एनीमेशन के बाद दृश्य को छोटा कर दिया है। फिर से पोस्ट पढ़ें। और मुझे बताएं कि आप क्या हासिल करने की कोशिश कर रहे हैं? – Joe

+0

लेकिन एनीमेशन के बाद मेरा छवि पहलू अनुपात खो गया है, सिकुड़ना समस्या नहीं है, मैं चाहता था कि वह भी –