الرسوم المتحركة في تطبيقات الجوال تجعلها حية ومستجيبة، وتوجه انتباه المستخدم وتحسن إدراك الواجهة. في هذه المقالة سنغطي الأنواع الرئيسية للرسوم المتحركة في iOS و Android: Property Animation و View Animation و UIKit Dynamics و Core Animation و Lottie و Rive و Spring Animation و Hero Animation و Shared Element Transition. ستساعد المادة المطورين المبتدئين على فهم الأدوات والمكتبات التي يجب اختيارها لمهمة محددة. لمزيد من التفاصيل — في الوثائق الرسمية لـ Android Animations.
النقاط الرئيسية
يوفر Android نظامين رئيسيين للرسوم المتحركة: View Animation (قديم) و Property Animation (حديث). View Animation (أو Tween Animation) تعمل فقط مع التمثيل البصري — تغير عرض العرض ولكن ليس خصائصه الفعلية (على سبيل المثال، تبقى إحداثيات النقر في مكانها). Property Animation، التي تم تقديمها في Android 3.0، تغير خصائص الكائن الحقيقية من خلال Animator — ValueAnimator أو ObjectAnimator أو AnimatorSet.
ObjectAnimator هو الفئة الأكثر شيوعًا في Property Animation. يقوم بتحريك خاصية معينة للكائن (مثل translationX و alpha و scaleY) لفترة زمنية محددة باستخدام Interpolator معين.
ObjectAnimator.ofFloat(myView, "translationX", 0f, 300f).apply {
duration = 500
interpolator = FastOutSlowInInterpolator()
startDelay = 200
}.start()
ValueAnimator غير مرتبط بكائن معين — يقوم بتوليد قيم يمكن استخدامها لأي خاصية أو منطق مخصص.
View Animation موصوفة في ملفات XML res/anim/. يتم دعم أربعة أنواع: scale و translate و rotate و alpha. العيب هو أن الرسوم المتحركة لا تغير معلمات العرض الفعلية. للتأثيرات البسيطة (الوميض، التدوير) لا تزال View Animation قابلة للتطبيق،但对于 المشاريع الجديدة، يوصى باستخدام Property Animation.
يقدم Jetpack Compose واجهة برمجة تطبيقات حديثة للرسوم المتحركة: animateAsState و Animatable و AnimatedVisibility و AnimatedContent. الرسوم المتحركة في Compose تفاعلية: عندما تتغير الحالة، تبدأ الرسوم المتحركة تلقائيًا.
var expanded = remember { mutableStateOf(false) }
val size = animateAsState(
if (expanded) 200f else 50f
)
Box(
modifier = Modifier
.size(size.value, size.value)
.clickable { expanded = !expanded }
.background(Color.Blue)
)
يوفر iOS مجموعة رسوم متحركة قوية تعتمد على Core Animation — إطار عمل منخفض المستوى يعمل مع CALayer. UIKit مبني فوق Core Animation مع طرق UIView.animate و UIViewPropertyAnimator المريحة.
UIView.animate هي أبسط طريقة للرسوم المتحركة في iOS. تسمح بتحريك frame و alpha و transform و backgroundColor وخصائص UIView الأخرى.
UIView.animate(
withDuration: 0.5,
delay: 0.2,
usingSpringWithDamping: 0.6,
initialSpringVelocity: 1.0,
options: [.curveEaseInOut]
) {
myView.frame.origin.x += 300
myView.alpha = 0.5
}
UIKit Dynamics — إطار عمل للرسوم المتحركة الفيزيائية: الجاذبية، التصادمات، الزنبركات، قوى الجذب. يسمح بإنشاء سلوك واقعي للكائنات بدون حساب يدوي للفيزياء. يستخدم للانتقالات المخصصة والقوائم المتحركة وعناصر اللعبة.
Core Animation (CAAnimation، CABasicAnimation، CAKeyframeAnimation) — واجهة برمجة تطبيقات منخفضة المستوى للرسوم المتحركة لـ CALayer. تدعم التحولات ثلاثية الأبعاد، والرسوم المتحركة للمسار (keyframe)، والإخفاء والتركيب. يستخدم SwiftUI Core Animation تحت الغطاء من خلال معدّلات animation و withAnimation.
let animation = CABasicAnimation(keyPath: "transform.rotation.z")
animation.fromValue = 0
animation.toValue = CGFloat.pi * 2
animation.duration = 1.0
animation.repeatCount = .infinity
myLayer.add(animation, forKey: "rotation")
بالنسبة لمعظم مشاريع iOS، يتم استخدام SwiftUI مع رسومه المتحركة المدمجة. على سبيل المثال، withAnimation يغلف تغييرات الحالة في سياق متحرك.
من الصعب تنفيذ الرسوم المتحركة المعقدة (الشخصيات، الانتقالات، أدوات التحميل) بالكود. Lottie و Rive تحل هذه المشكلة من خلال السماح للمصممين بإنشاء رسوم متحركة في المحررات المرئية والمطورين بتضمينها في التطبيق كمكون جاهز.
Lottie — مكتبة من Airbnb (الآن LottieFiles) تقوم بعرض الرسوم المتحركة من Adobe After Effects المصدرة بتنسيق JSON. مدعومة على Android و iOS و Flutter و React Native والويب. رسوم Lottie المتحركة متجهة، وتتدرج دون فقدان الجودة ويمكن تخصيصها برمجيًا (السرعة، التقدم، الألوان).
// Android import com.airbnb.lottie.LottieAnimationView val lottieView = findViewById<LottieAnimationView>(R.id.lottieView) lottieView.setAnimation(R.raw.loading_animation) lottieView.playAnimation()
Rive (سابقًا 2Dimensions) — أداة أكثر تقدمًا للرسوم المتحركة المتجهة. على عكس Lottie، يدعم Rive الرسوم المتحركة التفاعلية: الحالات، المشغلات، الانتقالات. يتم إنشاء الرسوم المتحركة في Rive Editor والتحكم فيها في التطبيق من خلال State Machine. Rive مناسب لواجهات الألعاب والأيقونات المتحركة والانتقالات المعقدة مع ردود الفعل.
في IT Sectr نستخدم Lottie للرسوم المتحركة الزخرفية (أدوات التحميل، العمليات الناجحة، الحالات الفارغة) و Rive للعناصر التفاعلية لشاشات الإعداد. هذا يقلل وقت تطوير الرسوم المتحركة بنسبة 60% مقارنة بالتنفيذ اليدوي على UIKit أو Canvas.
Shared Element Transition — رسم متحرك حيث يتحرك عنصر (صورة، نص، بطاقة) ويتحول بسلاسة عند الانتقال بين الشاشات. هذا يخلق وهم الاستمرارية: المستخدم لا "يذهب" إلى شاشة جديدة، بل "يسقط" في العنصر.
في Android، يتم تنفيذ الانتقال من خلال ActivityOptionsCompat وسمات transitionName. يدعم FragmentTransaction addSharedElement للانتقالات داخل النشاط. يستخدم Compose SharedTransitionLayout مع SharedContentState.
iOS لا يحتوي على Hero Transition مدمج، لكن مكتبة Hero (بواسطة Luke Zhao) تنفذ هذا النمط على UIKit. ببساطة قم بتعيين معرف للعناصر على كلتا الشاشتين — سيقوم Hero تلقائيًا بإنشاء انتقال سلس. في SwiftUI، رسوم الانتقال المتحركة مدمجة من خلال NavigationStack و matchedGeometryEffect.
يحتوي Flutter على عنصر واجهة Hero مدمج مع معلمة tag. عندما تحتوي صفحتان على Hero بنفس tag، يقوم Flutter تلقائيًا بتحريك الانتقال بينهما. هذه واحدة من أبسط الطرق لتنفيذ الرسوم المتحركة المعقدة في تطبيق جوال.
Hero( tag: 'profile_avatar', child: CircleAvatar( backgroundImage: AssetImage('avatar.jpg'), radius: 50, ), )
لجعل الرسوم المتحركة تبدو طبيعية، يتم استخدام منحنيات السرعة — Interpolator في Android و Easing في iOS. تحدد هذه كيف تتغير سرعة الرسوم المتحركة من البداية إلى النهاية.
يدعم Android العديد من المُقحمات المدمجة: LinearInterpolator (منتظم)، AccelerateDecelerateInterpolator (بطيء-سريع-بطيء)، FastOutSlowInInterpolator (Material Design)، OvershootInterpolator (مع تجاوز) و BounceInterpolator (مع ارتداد). يمكن إنشاء مُقحم مخصص من خلال XML أو فئة TimeInterpolator.
| Interpolator | السلوك | الاستخدام |
|---|---|---|
| LinearInterpolator | سرعة ثابتة | مؤشرات التحميل، الدوران اللانهائي |
| FastOutSlowInInterpolator | بداية سريعة، نهاية سلسة | Material Design، ظهور البطاقات |
| OvershootInterpolator | يتجاوز الهدف ويعود | عناصر التأكيد، الأزرار |
| BounceInterpolator | ارتداد في النهاية | القوائم، السحب للتحديث |
Spring Animation (رسوم الزنبرك المتحركة) تصمم فيزياء الزنبرك مع معلمات التخميد (damping) والصلابة (stiffness). التخميد 0 — تذبذبات لا نهائية، 1 — بدون تذبذبات. الصلابة تحدد سرعة العودة. Spring Animation متاحة في iOS (UIViewPropertyAnimator مع UISpringTimingParameters)، Android (SpringAnimation من physics2) و SwiftUI (spring()).
وثائق Spring Animation في Android تحتوي على أمثلة تكوين مفصلة.
Timeline (الجدول الزمني) — نهج يتم فيه تقسيم الرسوم المتحركة إلى إطارات بمرور الوقت. يستخدم للتسلسلات المعقدة حيث تكون AnimationSet أو الرسوم المتحركة الجماعية غير مرنة بما فيه الكفاية. يدعم Android AnimatorSet، و iOS — CAAnimationGroup، و Flutter — Interval في AnimationController.
Часто задаваемые вопросы
View Animation (Android) تغير فقط العرض المرئي لعرض بدون تغيير الخصائص الحقيقية (موضع النقر لا يتغير). Property Animation تغير خصائص الكائن الفعلية، مما يوفر سلوكًا أكثر مرونة وقابلية للتنبؤ. للمشاريع الجديدة، استخدم دائمًا Property Animation.
Hero Animation هي رسم متحرك حيث يتحرك عنصر ويتحول بسلاسة عند الانتقال بين الشاشات، مما يخلق وهم الاستمرارية. يتم تنفيذها من خلال Hero (Flutter) أو SharedElementTransition (Android) أو matchedGeometryEffect (SwiftUI).
Lottie و Rive هما مكتبتان لعرض الرسوم المتحركة المتجهة في وقت التشغيل. يقوم المصمم بإنشاء الرسم المتحرك في After Effects (Lottie) أو Rive Editor، ويصدره إلى JSON، ويقوم المطور بتضمينه دون كتابة كود الرسوم المتحركة يدويًا.
Spring Animation تصمم فيزياء الزنبرك: الرسم المتحرك له تخميد طبيعي و"ارتداد". يدعم SwiftUI و Jetpack Compose الرسوم المتحركة spring مباشرة، مما يجعل الواجهة أكثر حيوية واستجابة.
الاختيار يعتمد على السياق: FastOutSlowIn — لظهور العناصر، Overshoot — للتأكيد، Linear — لمؤشرات التحميل، Bounce — للقوائم. يوصي Material Design بمنحنيات قياسية: standard easing و deceleration easing و acceleration easing.
الملخص
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.