Computer >> कंप्यूटर >  >> स्मार्टफोन्स >> iPhone

कैसे CAAnimation ने मुझे एनिमेशन बनाने के अपने डर पर विजय प्राप्त करने में मदद की

यह लेख सहज एनिमेशन बनाने के लिए iOS में CA एनिमेशन का उपयोग करने पर केंद्रित है।

IOS के साथ काम करने के अपने शुरुआती दिनों के दौरान, जब भी कोई डिज़ाइनर मेरे पास आता था और जिस ऐप पर वे काम कर रहे थे, उसमें कुछ एनीमेशन के लिए कहता था, तो मैं बहुत घबरा जाता था।

कैसे CAAnimation ने मुझे एनिमेशन बनाने के अपने डर पर विजय प्राप्त करने में मदद की
Craaaaap

मुझे लगता था कि एनिमेशन के लिए डिज़ाइन तैयार करना आसान है - लेकिन दूसरी ओर, इसे लागू करना बहुत मुश्किल काम था।

मुझे कार्यान्वयन के लिए Google, StackOverflow और मेरे साथियों से मदद मिलेगी।
इस प्रक्रिया के दौरान मैंने एनिमेशन का एक फोबिया विकसित किया और हमेशा उनसे बचने की कोशिश की। लेकिन एक दिन वह सब बदल गया।

सीएएएनीमेशन ढूँढना

एक बार, मुझे एक दृश्य में छवियों के अनुक्रम को चेतन करना पड़ा। तो मेरा पहला कदम क्या था? जाहिर है, स्टैक ओवरफ्लो!

पहले लिंक को कोड मिला।

let image_1 = UIImage(named: "image-1")!
let image_2 = UIImage(named: "image-2")!
let image_3 = UIImage(named: "image-3")!
let images = [image_1, image_2, image_3]
let animatedImage = UIImage.animatedImage(with: images, duration: 2.0)
imageView.image = animatedImage
कैसे CAAnimation ने मुझे एनिमेशन बनाने के अपने डर पर विजय प्राप्त करने में मदद की

बहुत सीधा सा लगता है ना? अगर यह इतना आसान होता तो मैं यह लेख नहीं लिख रहा होता।

यह वह एनिमेशन है जिसकी आवश्यकता थी:

कैसे CAAnimation ने मुझे एनिमेशन बनाने के अपने डर पर विजय प्राप्त करने में मदद की
लक्ष्य समाप्त करें

और जैसा कि शायद स्पष्ट हो गया है, मैं इसके करीब कहीं नहीं था। मैं फँस गया था। मुझे उस एनीमेशन में इतने सारे अनुकूलन कैसे करना चाहिए और उन सभी को सिंक करना चाहिए?

तब मेरे सहयोगी ने मुझे सीएएएनीमेशन आजमाने को कहा। मैंने इसके बारे में पढ़ा और इसे एक नमूना परियोजना पर आजमाया। मेरे आश्चर्य के लिए, यह वास्तव में शक्तिशाली और उपयोग में आसान था।

कोर एनिमेशन क्या है?

कोर एनिमेशन आपको लगभग शून्य CPU उपयोग के साथ कई एनिमेशन निष्पादित करने में मदद करता है।
यह आपको उच्च फ्रेम दर और कई अनुकूलन प्रदान करता है जिनका उपयोग आप बहुत कम कोड के साथ कर सकते हैं।

आप यहां डॉक्स में अधिक विवरण प्राप्त कर सकते हैं:https://developer.apple.com/documentation/quartzcore

मैं कुछ ही घंटों में एक बुनियादी कार्यान्वयन करने में सक्षम था:

func addAnimation(firstImageView: UIImageView, secondImageView: UIImageView) {
        let basicAnimation1 = getBasicAnimation(withInitialPostion: centerPosition, finalPos: finalPosition)
        firstImageView.layer.add(basicAnimation1, forKey: "position")        
        let basicAnimation2 = self.getBasicAnimation(withInitialPostion: self.initalPosition, finalPos: self.centerPosition)
        secondImageView.layer.add(basicAnimation2, forKey: "position")
        self.addNextImage(forImageView: firstImageView)
    }
    func getBasicAnimation(withInitialPostion initialPos: CGPoint, finalPos: CGPoint) -> CABasicAnimation {
        let basicAnimation = CABasicAnimation(keyPath: "position")
        basicAnimation.fromValue = NSValue(cgPoint: initialPos)
        basicAnimation.toValue = NSValue(cgPoint: finalPos)
        basicAnimation.duration = 1
        basicAnimation.isRemovedOnCompletion = false
        basicAnimation.fillMode = CAMediaTimingFillMode.forwards
        basicAnimation.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut)
        return basicAnimation
    }
कैसे CAAnimation ने मुझे एनिमेशन बनाने के अपने डर पर विजय प्राप्त करने में मदद की
CA बेसिक एनिमेशन

इस कार्यान्वयन के लिए, मैंने CABasicAnimation . का उपयोग किया ।

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

अब, अपनी समस्या पर वापस जाएं।

इसे लागू करने के लिए, मैंने दो छवि दृश्य लिए और उनमें दो अलग-अलग चित्र जोड़े। फिर मैं सीएएएनीमेशन का उपयोग करके एक के बाद एक उन्हें एनिमेट करता रहा।

आप यहां स्रोत कोड पा सकते हैं।

यदि आप अंतिम gif की जांच करते हैं, तो आप देखेंगे कि कुछ गड़बड़ है। इससे पहले कि उपहार बॉक्स की पहली छवि दृश्य से बाहर हो जाए, हेडफ़ोन कुछ समय के लिए फ्लैश करता है और फिर छवि ऊपर की ओर जाती है।

ऐसा क्यों हो रहा है?

ऐसा इसलिए है क्योंकि जैसे ही हम छवि दृश्य में एनीमेशन जोड़ते हैं, हम उस दृश्य में अगली छवि जोड़ रहे हैं (पंक्तियाँ संख्या 5 और 6):

private func addAnimation(firstImageView: UIImageView, secondImageView: UIImageView) {
    let basicAnimation1 = getBasicAnimation(withInitialPostion: centerPosition, finalPos: finalPosition)
    firstImageView.layer.add(basicAnimation1, forKey: "position")    
    let basicAnimation2 = self.getBasicAnimation(withInitialPostion: self.initalPosition, finalPos: self.centerPosition)
    secondImageView.layer.add(basicAnimation2, forKey: "position")
    self.addNextImage(forImageView: firstImageView)
}

यहां हम इस मुद्दे से जूझ रहे हैं कि एनीमेशन में दोनों छवियों को कैसे सिंक किया जाए। लेकिन CAAnimation के साथ हमेशा एक समाधान होता है।

CA लेन-देन

CA लेन-देन हमें कई एनिमेशन को एक साथ सिंक करने में मदद करते हैं। यह सुनिश्चित करता है कि सभी एनिमेशन जो हमें एक साथ बंडल किए गए हैं, एक ही समय में शुरू हों।

साथ ही, आप अपने एनिमेशन को एक कंप्लीशन ब्लॉक दे सकते हैं, जिसे तब एक्जीक्यूट किया जाएगा जब एक बंडल में आपके सभी एनिमेशन पूरे हो जाएंगे।

आप इसके बारे में यहाँ और अधिक पढ़ सकते हैं।

private func addAnimation(firstImageView: UIImageView, secondImageView: UIImageView) {
    CATransaction.begin()
    CATransaction.setCompletionBlock {
        self.addNextImage(forImageView: firstImageView)
    }
    let basicAnimation1 = getBasicAnimation(withInitialPostion: centerPosition, finalPos: finalPosition)
    firstImageView.layer.add(basicAnimation1, forKey: "position")
    CATransaction.commit()
    
    let basicAnimation2 = self.getBasicAnimation(withInitialPostion: self.initalPosition, finalPos: self.centerPosition)
    secondImageView.layer.add(basicAnimation2, forKey: "position")
}

आप CATransaction.begin() . लिखकर शुरुआत करें . फिर, अपने सभी एनिमेशन लिखें जिन्हें आप सिंक में करना चाहते हैं। अंत में, CATransaction.commit() पर कॉल करें जो ब्लॉक में एनिमेशन शुरू करेगा।

आइए देखें कि अब हमारा एनिमेशन कैसा दिखता है:

कैसे CAAnimation ने मुझे एनिमेशन बनाने के अपने डर पर विजय प्राप्त करने में मदद की
CA ट्रांजैक्शन

एक आखिरी चीज जो मुझे करने की ज़रूरत थी वह थी एनीमेशन में स्प्रिंग इफेक्ट जोड़ना। शुक्र है, CAAnimation के पास इसका भी एक समाधान था।

CA स्प्रिंग एनिमेशन

CA स्प्रिंग एनिमेशन, जब एक परत में जोड़ा जाता है, तो इसे एक स्प्रिंग जैसा प्रभाव देता है, जिससे यह एक स्प्रिंग द्वारा लक्ष्य की ओर खींचा हुआ प्रतीत होता है।

परत लक्ष्य से जितनी दूर होगी, उसकी ओर त्वरण उतना ही अधिक होगा।

यह शारीरिक रूप से आधारित विशेषताओं जैसे वसंत की नमी और कठोरता पर नियंत्रण की अनुमति देता है। - दस्तावेज़

आप इसके बारे में Apple के दस्तावेज़ों से अधिक पढ़ सकते हैं:https://developer.apple.com/documentation/quartzcore/caspringanimation

आइए इसे हमारे मौजूदा कोड पर लागू करें:

private func getSpringAnimation(withInitialPostion initialPos: CGPoint, finalPos: CGPoint) -> CASpringAnimation {
    let basicAnimation = CASpringAnimation(keyPath: "position")
    basicAnimation.fromValue = NSValue(cgPoint: initialPos)
    basicAnimation.toValue = NSValue(cgPoint: finalPos)
    basicAnimation.duration = basicAnimation.settlingDuration
    basicAnimation.damping = 14
    basicAnimation.initialVelocity = 5
    basicAnimation.isRemovedOnCompletion = false
    basicAnimation.fillMode = CAMediaTimingFillMode.forwards
    return basicAnimation
}
कैसे CAAnimation ने मुझे एनिमेशन बनाने के अपने डर पर विजय प्राप्त करने में मदद की
वोइला

मेरा काम यहाँ हो गया है।

संक्षेप में, यहाँ CA एनिमेशन का उपयोग करने के कुछ लाभ दिए गए हैं:

  • वे उपयोग में आसान और कार्यान्वित करने में आसान हैं
  • कई अनुकूलन उपलब्ध हैं
  • एकाधिक एनिमेशन सिंक करना संभव है
  • लगभग शून्य CPU उपयोग

ये बस कुछ फायदे हैं। संभावनाएं अनंत हैं।

अब, जब भी एनिमेशन के लिए आवश्यकताएं आती हैं, मैं उन्हें डिजाइन करने और कार्यान्वित करने में आत्मविश्वास महसूस करता हूं। और मुझे उम्मीद है कि इसे पढ़ने के बाद आप भी ऐसा ही महसूस करेंगे।
कोई सुझाव या प्रतिक्रिया देने के लिए स्वतंत्र महसूस करें।


  1. Microsoft PowerPoint एनिमेशन में ध्वनि प्रभाव कैसे जोड़ें

    पावरपॉइंट में एनिमेशन पेन एक कार्य फलक है जो स्लाइड के दाईं ओर दिखाई देता है और आपके द्वारा अपनी स्लाइड में जोड़े गए एनिमेशन से संबंधित महत्वपूर्ण जानकारी प्रदर्शित करता है। यदि आपने अपने ऑब्जेक्ट में एनीमेशन प्रभाव नहीं जोड़ा है, तो एनिमेशन टैब पर जाएं, और एनिमेशन बॉक्स में अपना वांछित प्रभाव चुनें

  1. स्टक्सनेट:यह क्या है और यह कैसे काम करता है?

    स्टक्सनेट क्या है? स्टक्सनेट एक कंप्यूटर वर्म है जिसे ईरानी परमाणु सुविधाओं पर हमला करने के लिए डिज़ाइन और तैनात किया गया था। भौतिक बुनियादी ढांचे को प्रभावित करने वाले दुनिया के पहले साइबर हथियार, स्टक्सनेट ने ईरानी परमाणु सेंट्रीफ्यूज को निशाना बनाया, महत्वपूर्ण सैन्य क्षमताओं को नुकसान पहुँचाया

  1. एनीमेशन अक्षम करके Windows 10 को तेज़ कैसे बनाएं

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