/ / UIView स्केल एनीमेशन overshoots बदलते समय - आईओएस, एनीमेशन, uiviewanimation

UIView स्केल एनीमेशन overshoots बदलते समय - आईओएस, एनीमेशन, uiviewanimation

जब मैं एक दृश्य के परिवर्तन में बदलाव को एनिमेट करता हूं,फिर पहली एनीमेशन खत्म होने से पहले किसी अन्य एनीमेशन में उस बदलाव को रीसेट करें, सबकुछ बढ़िया है (यहां एक रोटेशन के साथ दिखाया गया है)। एनीमेशन आसानी से नए लक्ष्य पर स्विच करता है:

लेकिन जब मैं इसे स्केल के साथ करता हूं, तो एनीमेशन शानदार रूप से ओवरशूट करता है:

यहां ब्रेकिंग कोड है:

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)

एनीमेशन गिफ