जब मैं एक दृश्य के परिवर्तन में बदलाव को एनिमेट करता हूं,फिर पहली एनीमेशन खत्म होने से पहले किसी अन्य एनीमेशन में उस बदलाव को रीसेट करें, सबकुछ बढ़िया है (यहां एक रोटेशन के साथ दिखाया गया है)। एनीमेशन आसानी से नए लक्ष्य पर स्विच करता है:
लेकिन जब मैं इसे स्केल के साथ करता हूं, तो एनीमेशन शानदार रूप से ओवरशूट करता है:
यहां ब्रेकिंग कोड है:
UIView.animateWithDuration(1) {
self.someView.layer.transform = CATransform3DMakeScale(0.001, 0.001, 1)
}
UIView.animateWithDuration(1,
delay: 0.5,
options: nil,
animations: {
self.someView.layer.transform = CATransform3DIdentity
}, completion: nil
)
क्या किसी और ने इसे देखा है? क्या मुझसे कुछ ग़लत हो रहा है?
संपादित करें: और क्या कोई अच्छा कामकाज है?
संपादित करें 2: मेरा मानना है कि यह एक डुप्लिकेट है यह प्रश्न और बंद करने के लिए मतदान कर रहा हूँ।
उत्तर:
उत्तर № 1 के लिए 1यह ब्लॉग पोस्ट उत्तर प्रदान करता है: आईओएस 8 में, UIView एनिमेशन additive हैं, और स्केल एनिमेशन के साथ यह एक दुर्भाग्यपूर्ण परिणाम है।
असल में, दूसरी एनीमेशन होती है के साथ साथ पहली एनीमेशन। एकमात्र समाधान एक नया शुरू करने से पहले मूल एनीमेशन को स्पष्ट रूप से निकालना है:
view.layer.transform = view.layer.presentationLayer().transform
view.layer.removeAllAnimations()
जवाब के लिए 0 № 2
हाय मैं "बिल्कुल यकीन नहीं कर रहा हूं कि आप क्या खोज रहे हैं, लेकिन यदि आप चाहते हैं कि दृश्य उस पर वापस जाने के लिए" मूल स्केल "डी जोड़ देगा। Butoreverse flag।
UIView.animateWithDuration(1, delay: 0, options: .Autoreverse | .Repeat, animations: {
myView.layer.transform = CATransform3DMakeScale(0.001, 0.001, 1)
}, completion: nil)
जबकि अगर आप एक साथ एनिमेशन को स्ट्रिंग करना चाहते हैं, तो मैं इसे UIView.animateKeyframesWithDuration () में करता हूं
UIView.animateKeyframesWithDuration(2, delay: 0.0, options: nil, animations: {
UIView.addKeyframeWithRelativeStartTime(0.0, relativeDuration: 0.5, animations: {
// Animation 1
})
UIView.addKeyframeWithRelativeStartTime(1, relativeDuration: 0.5, animations: {
// Animation 2
})
}, completion: nil)