CAAnimation Core Animation کی ایک مجرد بنیادی کلاس ہے جو تمام اقسام کی اینیمیشنز کے لیے مشترکہ انٹرفیس متعین کرتی ہے: CABasicAnimation، CAKeyframeAnimation، CAAnimationGroup، CATransition۔ مضمون کلاس کے درجہ بندی، کلیدی خصوصیات، اینیمیشن گروپ بندی اور Swift میں عملی مثالوں کی وضاحت کرتا ہے۔
کلیدی نکات
CAAnimation Core Animation کی ایک مجرد کلاس ہے جو تمام اینیمیشنز کے لیے مشترکہ انٹرفیس متعین کرتی ہے۔ یہ CAMediaTiming پروٹوکول (مدت، تکرار، خودکار الٹ) اور CAMediaTimingFillMode (اینیمیشن سے پہلے/بعد کا رویہ) کو نافذ کرتی ہے۔ CAAnimation کو براہ راست مثال کے طور پر نہیں بنایا جا سکتا — اس کے ذیلی طبقات میں سے ایک استعمال کریں: CABasicAnimation، CAKeyframeAnimation، CAAnimationGroup، CATransition یا CAAnimation (animationForKeyPath کے ذریعے)۔
ہر CAAnimation add(_:forKey:) طریقہ کے ذریعے CALayer میں شامل کی جاتی ہے۔ forKey پیرامیٹر پرت پر اینیمیشن کا ایک منفرد شناخت کنندہ ہے۔ ایک keyPath میں صرف ایک فعال اینیمیشن ہو سکتی ہے۔ اینیمیشن تبدیل کرنے کے لیے، نیا شامل کرنے سے پہلے removeAnimation(forKey:) استعمال کریں۔
Apple کے مطابق، CAAnimation پرت میں ایک "عارضی" تبدیلی ہے۔ اینیمیشن مکمل ہونے کے بعد، پیشکش پرت ماڈل پرت کی قدروں پر واپس آ جاتی ہے اگر fillMode اور isRemovedOnCompletion سیٹ نہ ہوں۔
Core Animation چار اہم CAAnimation ذیلی طبقات فراہم کرتا ہے، ہر ایک اپنے اینیمیشن منظر نامے کے لیے۔ درجہ بندی کو سمجھنا کام کے لیے صحیح قسم کا انتخاب کرنے میں مدد کرتا ہے۔
| کلاس | مقصد | کلیدی خصوصیات |
|---|---|---|
| CABasicAnimation | ایک خاصیت کو A سے B تک اینیمیٹ کرتا ہے | fromValue، toValue، byValue، keyPath |
| CAKeyframeAnimation | متعدد کلیدی فریموں پر اینیمیشن | values، keyTimes، path، calculationMode |
| CAAnimationGroup | متعدد اینیمیشنز کو گروپ کرتا ہے | animations صف، واحد duration |
| CATransition | پرت کی حالتوں کے درمیان منتقلی | type (fade/push/moveIn/reveal)، subtype، startProgress |
CABasicAnimation سب سے آسان اور مقبول ذیلی طبقہ ہے۔ CAKeyframeAnimation پیچیدہ مسیروں کے لیے استعمال ہوتی ہے (مثال کے طور پر، Bezier منحنی کے ساتھ حرکت)۔ CAAnimationGroup متعدد اینیمیشنز کو متوازی طور پر چلاتی ہے۔ CATransition تصاویر یا مواد کی حالتوں کے درمیان ایک تیار منتقلی ہے۔
CAMediaTiming پروٹوکول CAAnimation کا ایک بنیادی حصہ ہے۔ یہ بنیادی وقت کی خصوصیات متعین کرتا ہے: duration، repeatCount، repeatDuration، autoreverses، beginTime (والدین کے نسبت شروع ہونے کا وقت)، timeOffset (ایک چکر میں انحراف)، speed (پلے بیک کی رفتار)۔
fillMode خاصیت (CAMediaTimingFillMode) اینیمیشن سے پہلے (backwards) اور بعد (forwards) پرت کی نمائش متعین کرتی ہے۔ اقدار: removed (پہلے سے طے شدہ — ماڈل پرت پر واپس)، forwards (آخری حالت میں رہتا ہے)، backwards (شروع ہونے سے پہلے ابتدائی حالت دکھاتا ہے)، both (دونوں رویوں کو ملاتا ہے)۔ fillMode صرف اس وقت کام کرتا ہے جب isRemovedOnCompletion = false ہو۔
CAAnimation CAMediaTiming سے وراثت پاتا ہے اور اسے والدین اینیمیشن (CAAnimationGroup) میں nested کیا جا سکتا ہے۔ اس صورت میں، beginTime والدین کے آغاز کے نسبت شمار کیا جاتا ہے، اور duration والدین کی مدت سے محدود ہوتی ہے۔ Speed = 2.0 اینیمیشن کی رفتار کو دوگنا کر دیتا ہے۔
CAAnimationGroup متعدد CAAnimation مثالوں کو ایک گروپ میں یکجا کرتا ہے۔ تمام ذیلی اینیمیشنز متوازی طور پر شروع ہوتی ہیں جب تک کہ ہر ایک کے لیے beginTime سیٹ نہ کیا گیا ہو۔ گروپ کا اپنا duration ہوتا ہے، جو ذیلی اینیمیشنز کی زیادہ سے زیادہ مدت کو محدود کرتا ہے۔ گروپ کی timingFunction کو ڈیفالٹ قدر کے طور پر استعمال کیا جاتا ہے اگر ذیلی اینیمیشن اپنی سیٹ نہ کرے۔
CAKeyframeAnimation values کی صف سے متعین متعدد کلیدی فریموں پر ایک خاصیت کو اینیمیٹ کرتی ہے۔ keyTimes پیرامیٹر (0 سے 1 تک NSNumber کی صف) ہر فریم کے لیے وقت کے نشانات متعین کرتا ہے۔ calculationMode انٹرپولیشن متعین کرتا ہے: linear، discrete (کوئی انٹرپولیشن نہیں)، paced (یکساں رفتار)، cubic (spline)، cubicPaced۔
import QuartzCore
// CAAnimationGroup — اینیمیشن کا امتزاج
func complexLayerAnimation(_ layer: CALayer) {
let fade = CABasicAnimation(keyPath: "opacity")
fade.fromValue = 1.0
fade.toValue = 0.3
let scale = CABasicAnimation(keyPath: "transform.scale")
scale.fromValue = 1.0
scale.toValue = 1.5
let rotate = CABasicAnimation(keyPath: "transform.rotation.z")
rotate.fromValue = 0
rotate.toValue = Double.pi * 2
let group = CAAnimationGroup()
group.animations = [fade, scale, rotate]
group.duration = 2.0
group.repeatCount = .infinity
group.autoreverses = true
layer.add(group, forKey: "pulse")
}
// CAKeyframeAnimation — مسیر پر حرکت
func animateAlongPath(_ layer: CALayer) {
let path = UIBezierPath()
path.move(to: CGPoint(x: 0, y: 0))
path.addCurve(
to: CGPoint(x: 200, y: 300),
controlPoint1: CGPoint(x: 100, y: 0),
controlPoint2: CGPoint(x: 100, y: 300)
)
let anim = CAKeyframeAnimation(keyPath: "position")
anim.path = path.cgPath
anim.duration = 1.5
anim.calculationMode = .cubicPaced
anim.rotationMode = .auto
anim.fillMode = .forwards
anim.isRemovedOnCompletion = false
layer.add(anim, forKey: "pathAnim")
layer.position = CGPoint(x: 200, y: 300)
}
// CAKeyframeAnimation حسب ضرورت اقدار کے ساتھ
func bounceAnimation(_ layer: CALayer) {
let bounce = CAKeyframeAnimation(keyPath: "position.y")
bounce.values = [0, -50, 0, -25, 0, -10, 0]
bounce.keyTimes = [0, 0.15, 0.3, 0.45, 0.6, 0.8, 1.0]
bounce.duration = 0.8
bounce.timingFunction = CAMediaTimingFunction(name: .easeOut)
bounce.isAdditive = true // موجودہ پوزیشن کے نسبت
layer.add(bounce, forKey: nil)
}CAAnimationGroup 2.0 کی مدت کے ساتھ fade، scale اور rotate کو متوازی طور پر انجام دیتی ہے۔ path اور calculationMode = .cubicPaced کے ساتھ CAKeyframeAnimation خودکار گردش (rotationMode = .auto) کے ساتھ Bezier منحنی کے ساتھ یکساں حرکت فراہم کرتی ہے۔ bounceAnimation نسبتاً انحراف کے لیے isAdditive استعمال کرتی ہے۔
مواد کی تبدیلی کے لیے CATransition اور نبض کے اثرات کے لیے CAAnimationGroup استعمال کرتے ہوئے پیچیدہ پرت اینیمیشن کی ایک مکمل CAAnimation مثال۔
import UIKit
import QuartzCore
class AnimationDemoView: UIView {
private let demoLayer = CALayer()
private var currentColor: CGColor = UIColor.systemBlue.cgColor
override func layoutSubviews() {
super.layoutSubviews()
demoLayer.frame = CGRect(x: bounds.midX - 40, y: bounds.midY - 40,
width: 80, height: 80)
demoLayer.backgroundColor = currentColor
demoLayer.cornerRadius = 12
layer.addSublayer(demoLayer)
}
func animateTransition() {
// CATransition — حالتوں کے درمیان منتقلی
let transition = CATransition()
transition.type = .fade
transition.duration = 0.5
transition.timingFunction = CAMediaTimingFunction(name: .easeInEaseOut)
demoLayer.add(transition, forKey: nil)
// لین دین کے ذریعے مواد تبدیل کرنا
currentColor = currentColor == UIColor.systemBlue.cgColor
? UIColor.systemRed.cgColor
: UIColor.systemBlue.cgColor
demoLayer.backgroundColor = currentColor
}
func startPulse() {
let scaleUp = CABasicAnimation(keyPath: "transform.scale")
scaleUp.fromValue = 1.0
scaleUp.toValue = 1.3
let fadeOut = CABasicAnimation(keyPath: "opacity")
fadeOut.fromValue = 1.0
fadeOut.toValue = 0.6
let glow = CABasicAnimation(keyPath: "shadowOpacity")
glow.fromValue = 0.0
glow.toValue = 0.8
let group = CAAnimationGroup()
group.animations = [scaleUp, fadeOut, glow]
group.duration = 1.2
group.autoreverses = true
group.repeatCount = .infinity
group.timingFunction = CAMediaTimingFunction(name: .easeInEaseOut)
demoLayer.add(group, forKey: "pulse")
}
func stopAnimations() {
demoLayer.removeAllAnimations()
demoLayer.transform = CATransform3DIdentity
demoLayer.opacity = 1.0
demoLayer.shadowOpacity = 0.0
}
}type: .fade کے ساتھ CATransition دو backgroundColor حالتوں کے درمیان ہموار منتقلی پیدا کرتی ہے۔ CAAnimationGroup نبض کے اثر کے لیے scale، opacity اور shadowOpacity کو یکجا کرتی ہے۔ removeAllAnimations() تمام اینیمیشنز منسوخ کرتی ہے اور پرت کو اس کی اصل ماڈل پرت قدروں پر واپس لاتی ہے۔
اکثر پوچھے گئے سوالات
CABasicAnimation یکساں انٹرپولیشن کے ساتھ ایک خاصیت کو ابتدائی قدر (fromValue) سے آخری قدر (toValue) تک اینیمیٹ کرتی ہے۔ CAKeyframeAnimation آپ کو غیر خطی کلیدی فریم اینیمیشن کے لیے درمیانی اقدار (values) اور وقت کے نشانات (keyTimes) کی صف متعین کرنے کی اجازت دیتی ہے، بشمول path کے ذریعے منحنی پر مبنی حرکت۔
CAAnimationGroup اس وقت ضروری ہے جب متعدد اینیمیشنز کو ضمانتی ہم آہنگی کے ساتھ متوازی طور پر چلنا ہو: گروپ کی مدت تمام ذیلی اینیمیشنز کو محدود کرتی ہے۔ مشترکہ اثرات کے لیے group استعمال کریں: ایک ساتھ پیمائش + دھندلاپن تبدیلی + گردش۔
fillMode اینیمیشن سے پہلے (backwards) اور بعد (forwards) پرت کی نمائش متعین کرتا ہے۔ قدر .forwards اینیمیشن مکمل ہونے کے بعد پرت کو آخری حالت میں رکھتی ہے (isRemovedOnCompletion = false درکار ہے)۔ .both backwards (شروع ہونے سے پہلے ابتدائی حالت) اور forwards کو ملاتا ہے۔
CAAnimation ایک اینیمیشن آبجیکٹ (ہدایت) ہے جو layer.add(animation, forKey:) کے ذریعے CALayer میں شامل کیا جاتا ہے۔ اینیمیشن ایک علیحدہ آبجیکٹ کے طور پر موجود ہوتی ہے، دوبارہ استعمال کی جا سکتی ہے (نقل کر کے) اور CAMediaTiming کے ذریعے منظم کی جاتی ہے۔ ایک پرت مختلف کنجیوں کے ساتھ متعدد اینیمیشنز رکھ سکتی ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں