UIView.animate iOS-এ UIView বৈশিষ্ট্য অ্যানিমেট করার প্রধান পদ্ধতি, যা UIKit-এ duration, delay এবং options সহ ব্লকের মাধ্যমে বাস্তবায়িত। পদ্ধতিটি frame, alpha, transform, backgroundColor এবং অন্যান্য অ্যানিমেটেবল বৈশিষ্ট্য অ্যানিমেট করে। এই নিবন্ধটি সিনট্যাক্স, প্যারামিটার, ব্যবহারিক উদাহরণ এবং UIKit অ্যানিমেশনের অভ্যন্তরীণ কাঠামো বর্ণনা করে।
মূল পয়েন্ট
UIView.animate UIView ক্লাসের একটি স্ট্যাটিক পদ্ধতি, যা iOS 4 (2010)-এ চালু হয়েছে। এটি UIView-এর অ্যানিমেটেবল বৈশিষ্ট্য: frame, bounds, center, alpha, transform, backgroundColor অ্যানিমেট করার জন্য একটি ডিক্লারেটিভ API প্রদান করে। পদ্ধতিটি বৈশিষ্ট্য পরিবর্তন সহ একটি ব্লক (ক্লোজার) গ্রহণ করে — সিস্টেম প্রতিটি পরিবর্তিত বৈশিষ্ট্যের জন্য স্বয়ংক্রিয়ভাবে CABasicAnimation তৈরি করে।
ব্লক সিনট্যাক্স পুরানো beginAnimations/commitAnimations (iOS 2-3) প্রতিস্থাপন করেছে এবং UIKit-এ অ্যানিমেশন মানদণ্ডে পরিণত হয়েছে। UIView.animate অ্যানিমেশন মূল থ্রেডে চলে এবং UI ব্লক করে না। ডিফল্টভাবে, অ্যানিমেশনের সময়কাল easeInOut বক্ররেখা সহ 0.25 সেকেন্ড।
Apple WWDC 2023 অনুসারে, নতুন প্রকল্পে প্রস্তাবিত অ্যানিমেশন পদ্ধতি হল SwiftUI .animation() এবং .transition() মডিফায়ার সহ, কিন্তু UIView.animate iOS 16 এবং নিচের সমর্থনের পাশাপাশি জটিল কাস্টম ট্রানজিশনের জন্য প্রধান হাতিয়ার হিসেবে রয়ে গেছে।
UIView.animate তিনটি মূল প্যারামিটার প্রদান করে: duration (সেকেন্ডে সময়কাল), delay (শুরুর আগে বিলম্ব), এবং options (UIView.AnimationOptions বিট মাস্কের সেট)। Options-এর মধ্যে অন্তর্ভুক্ত curve (easeInOut, easeIn, easeOut, linear), repeat, autoreverse, allowUserInteraction, beginFromCurrentState এবং overrideInheritedDuration।
| প্যারামিটার | প্রকার | বিবরণ |
|---|---|---|
| duration | TimeInterval | সেকেন্ডে অ্যানিমেশনের সময়কাল (Double প্রকার) |
| delay | TimeInterval | অ্যানিমেশন শুরুর আগে বিলম্ব |
| options | UIView.AnimationOptions | বিট মাস্ক: curve, repeat, autoreverse, layoutSubviews |
| animations | () -> Void | অ্যানিমেটেবল বৈশিষ্ট্যের পরিবর্তন সহ ব্লক |
| completion | (Bool) -> Void | অ্যানিমেশন শেষ হওয়ার পর ক্লোজার |
options প্যারামিটার একটি অ্যারের মাধ্যমে সংযুক্ত হয়: [.curveEaseOut, .repeat, .autoreverse]। repeat এবং autoreverse সহ অ্যানিমেশন View-কে তার প্রাথমিক অবস্থায় মসৃণভাবে ফিরিয়ে আনে এবং অনির্দিষ্টকাল ধরে পুনরাবৃত্তি করে। সীমিত সংখ্যক পুনরাবৃত্তির জন্য, animateKeyframes ব্যবহার করুন।
স্প্রিং অ্যানিমেশন একটি ভৌত স্প্রিং প্রভাব যোগ করে: বস্তুটি কেবল বিন্দু A থেকে B-তে যায় না, বরং সঙ্কুচিত দোলনের সাথে লক্ষ্য অতিক্রম করে। প্যারামিটার: usingSpringWithDamping (সঙ্কোচন 0-1, যেখানে 0 সর্বোচ্চ দোলন) এবং initialSpringVelocity (প্রারম্ভিক স্প্রিং বেগ)।
Apple প্রাকৃতিক UI অ্যানিমেশনের জন্য 0.4-0.8 পরিসরে usingSpringWithDamping ব্যবহারের সুপারিশ করে। মান 0.5 "রাবারের মতো" অনুভূতি ছাড়াই লক্ষণীয় প্রতিক্ষেপণ তৈরি করে। initialSpringVelocity = 1.0 1 pt/সেকেন্ডের গতির সাথে মিলে। 0-এ, অ্যানিমেশন স্থির অবস্থা থেকে শুরু হয়।
// স্প্রিং অ্যানিমেশন ও কীফ্রেম উদাহরণ
import UIKit
class AnimatedView: UIView {
func springBounce() {
// সঙ্কোচন সহ স্প্রিং অ্যানিমেশন
UIView.animate(
withDuration: 0.8,
delay: 0,
usingSpringWithDamping: 0.5,
initialSpringVelocity: 1.0,
options: [.allowUserInteraction],
animations: {
self.transform = CGAffineTransform(scaleX: 1.2, y: 1.2)
self.alpha = 0.7
},
completion: { _ in
UIView.animate(withDuration: 0.3) {
self.transform = .identity
self.alpha = 1.0
}
}
)
}
func slideIn(from offset: CGFloat) {
self.transform = CGAffineTransform(translationX: offset, y: 0)
self.alpha = 0.0
UIView.animate(
withDuration: 0.6,
delay: 0.1,
options: [.curveEaseOut]
) {
self.transform = .identity
self.alpha = 1.0
}
}
}UIView.animateKeyframes আপনাকে একটি অ্যানিমেশনকে একাধিক ধাপে (কীফ্রেম) ভাগ করতে দেয়, প্রতিটির নিজস্ব আপেক্ষিক সময় ও সময়কাল থাকে। addKeyframe(withRelativeStartTime:relativeDuration:) পদ্ধতি মোট অ্যানিমেশন সময়কালের সাপেক্ষে 0 থেকে 1 পর্যন্ত সময় মান গ্রহণ করে।
কীফ্রেম অ্যানিমেশন বহু-পদক্ষেপ প্রভাবের জন্য উপযোগী: বাটন স্পন্দন (বৃদ্ধি → বিরাম → ফেরত), অনুক্রমিক উপাদান আবির্ভাব, মধ্যবর্তী অবস্থাসহ জটিল বিকৃতি। প্রতিটি কীফ্রেমের options-এর মাধ্যমে নিজস্ব অ্যানিমেশন বক্ররেখা থাকতে পারে।
// জটিল ক্রম সহ কীফ্রেম অ্যানিমেশন
func complexPulse() {
UIView.animateKeyframes(withDuration: 2.0, delay: 0, options: [.repeat]) {
UIView.addKeyframe(withRelativeStartTime: 0.0, relativeDuration: 0.25) {
self.transform = CGAffineTransform(scaleX: 1.5, y: 1.5)
self.alpha = 0.5
}
UIView.addKeyframe(withRelativeStartTime: 0.25, relativeDuration: 0.25) {
self.transform = CGAffineTransform(scaleX: 0.8, y: 0.8)
self.alpha = 0.8
}
UIView.addKeyframe(withRelativeStartTime: 0.5, relativeDuration: 0.5) {
self.transform = .identity
self.alpha = 1.0
}
}
}
// নেস্টেড ক্লোজার সহ অ্যানিমেশন
func animateCardTransition() {
UIView.animate(withDuration: 0.4, delay: 0, options: [.curveEaseOut]) {
self.transform = CGAffineTransform(scaleX: 0.95, y: 0.95)
} completion: { _ in
UIView.animate(withDuration: 0.3, delay: 0, options: [.curveEaseIn]) {
self.transform = .identity
}
}
}ভিতরে, UIView.animate Core Animation (CAAnimation)-এর মাধ্যমে প্রতিটি UIView-এর CALayer-এ অ্যানিমেশন অর্পণ করে। যখন আপনি অ্যানিমেশন ব্লকের ভিতরে frame পরিবর্তন করেন, সিস্টেম সংশ্লিষ্ট লেয়ারের position এবং bounds বৈশিষ্ট্যের জন্য CABasicAnimation তৈরি করে। যদি alpha পরিবর্তন করা হয় — লেয়ারের opacity বৈশিষ্ট্যের জন্য CABasicAnimation।
Core Animation একটি পৃথক রেন্ডার সার্ভার প্রক্রিয়া (iOS-এ backboardd) ব্যবহার করে যা 120 Hz (ProMotion)-এ অ্যানিমেশন প্রক্রিয়া করে। UIView.animate মূল থ্রেড ব্লক করে না — বৈশিষ্ট্য পরিবর্তন রেন্ডার সার্ভারে পাঠানো হয়, যা অ্যাপ্লিকেশনের অংশগ্রহণ ছাড়াই ফ্রেম ইন্টারপোলেট করে।
Apple-এর মতে, UIView.animate-এর মাধ্যমে অ্যানিমেশনগুলিতে 60 FPS-এ প্রতি পরিবর্তিত লেয়ারে ~2-3% CPU ওভারহেড থাকে। বৃহৎ পরিসরের অ্যানিমেশনের (একসঙ্গে 20+ বস্তু) জন্য, CATransaction এবং ম্যানুয়াল লেয়ার ব্যবস্থাপনা ব্যবহারের সুপারিশ করা হয়।
UIKit অ্যানিমেশন ডিবাগ ও ভিজুয়ালাইজ করার জন্য, Xcode Debug View Hierarchy ব্যবহার করুন — এটি প্রতিটি লেয়ারে সক্রিয় CAAnimations, তাদের সময়কাল, বক্ররেখা ও বর্তমান অবস্থা দেখায়। Core Animation-এর অভ্যন্তরীণ কাঠামো বোঝা জটিল অ্যানিমেশনের সাথে কর্মক্ষমতা সমস্যা এড়াতে এবং UIView.animate ও CABasicAnimation-এর প্রত্যক্ষ ব্যবহারের মধ্যে সর্বোত্তম পদ্ধতি বেছে নিতে সাহায্য করে।
UIKit অ্যানিমেশন ডিবাগ ও ভিজুয়ালাইজ করার জন্য, Xcode Debug View Hierarchy ব্যবহার করুন — এটি প্রতিটি লেয়ারে সক্রিয় CAAnimations, তাদের সময়কাল, বক্ররেখা ও বর্তমান অবস্থা দেখায়। Core Animation-এর অভ্যন্তরীণ কাঠামো বোঝা জটিল অ্যানিমেশনের সাথে কর্মক্ষমতা সমস্যা এড়াতে এবং UIView.animate ও CABasicAnimation-এর প্রত্যক্ষ ব্যবহারের মধ্যে সর্বোত্তম পদ্ধতি বেছে নিতে সাহায্য করে।
সচরাচর জিজ্ঞাসিত প্রশ্ন
অ্যানিমেটেবল বৈশিষ্ট্য UIView-এর: frame, bounds, center, alpha, transform (CGAffineTransform), backgroundColor। Auto Layout সীমাবদ্ধতা পরিবর্তনের সময় layoutIfNeeded()-এর পরিবর্তনও অ্যানিমেট হয়। অন্যান্য বৈশিষ্ট্য UIView.animate-এর মাধ্যমে অ্যানিমেট করা যায় না — সেগুলোর জন্য CALayer বা CADisplayLink ব্যবহার করুন।
UIView.animate বর্তমান অবস্থা থেকে লক্ষ্য অবস্থায় একটি অ্যানিমেশন সম্পাদন করে। UIView.animateKeyframes মোট সময়কালকে ভিন্ন ভিন্ন আপেক্ষিক শুরু সময় ও সময়কাল সহ একাধিক ধাপে (কীফ্রেম) ভাগ করে। কীফ্রেম বহু-পদক্ষেপ ক্রমের জন্য উপযুক্ত।
UIView.animate অ্যানিমেশন রেন্ডার সার্ভারে (backboardd) প্রক্রিয়া করা হয় — একটি পৃথক iOS প্রক্রিয়া। মূল থ্রেড কেবল প্রাথমিক ও চূড়ান্ত বৈশিষ্ট্য মান পাঠায়। ফ্রেম ইন্টারপোলেশন Core Animation-এর মাধ্যমে GPU-তে 120 FPS পর্যন্ত হারে সম্পাদিত হয়।
UIView-এ layer.removeAllAnimations() কল করুন — এটি অভ্যন্তরে তৈরি সমস্ত CAAnimation সরিয়ে ফেলে। আরও সঠিক নিয়ন্ত্রণের জন্য, CATransaction এবং CAAnimation.keyPath-এর মাধ্যমে অ্যানিমেশন শনাক্তকারী ব্যবহার করুন।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন