English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
iOS基本动画/关键帧动画/利用缓动函数实现物理动画效果
先说下基本动画部分
基本动画部分比较简单, 但能实现的动画效果也很局限
使用方法大致为:
#1. إنشاء UI أو صورة الأصل
#2. 创建CABasicAnimation实例, 并设置keypart/duration/fromValue/toValue
#3. إعداد موقف النهاية للرسوم المتحركة
#4. إضافة الرسوم المتحركة المعدة إلى طبقة layer
举个例子, 比如实现一个圆形从上往下移动, 上代码:
//إعداد الصورة الأصلية UIView *showView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; showView.layer.masksToBounds = نعم; showView.layer.cornerRadius = 50.f; showView.layer.backgroundColor = [UIColor redColor].CGColor; [self.view addSubview:showView]; //创建基本动画 CABasicAnimation *basicAnimation = [CABasicAnimation animation]; //设置属性 basicAnimation.keyPath = @"position"; basicAnimation.duration = 4.0f; basicAnimation.fromValue = [NSValue valueWithCGPoint:showView.center]; basicAnimation.toValue = [NSValue valueWithCGPoint:CGPointMake(50, 300)]; //ضبط موقع نهاية التحرك showView.center = CGPointMake(50, 300); //إضافة تحرك إلى طبقة layer [showView.layer addAnimation:basicAnimation forKey:nil];
دعنا نتحدث عن رسوم المتحركة الأساسية
هي مشابهة للرسوم المتحركة الأساسية، ولكن يمكنها ضبط عدة مسارات للرسوم المتحركة، ويكون استخدامها مشابهًا، ويكون تقريبًا كالتالي
#1. إنشاء UI أو صورة الأصل
#2. إنشاء مثال CAKeyframeAnimation وضبط keypart/duration/values، يمكن للرسوم المتحركة الأساسية فقط ضبط البداية والنهاية، بينما يمكن للرسوم المتحركة الأساسية إضافة عدة نقاط مسار
#3. إعداد موقف النهاية للرسوم المتحركة
#4. إضافة الرسوم المتحركة المعدة إلى طبقة layer
لنأخذ مثالًا على حركة الاهتزاز الجانبي للكرية الحمراء إلى الأسفل، النص التالي:
//إعداد الصورة الأصلية UIView *showView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; showView.layer.masksToBounds = نعم; showView.layer.cornerRadius = 50.f; showView.layer.backgroundColor = [UIColor redColor].CGColor; [self.view addSubview:showView]; //إنشاء تحرك بالكوافيه CAKeyframeAnimation *keyFrameAnimation = [CAKeyframeAnimation animation]; //ضبط خصائص التحرك keyFrameAnimation.keyPath = @"position"; keyFrameAnimation.duration = 4.0f; keyFrameAnimation.values = @[[NSValue valueWithCGPoint:showView.center], [NSValue valueWithCGPoint:CGPointMake(100, 100)], [NSValue valueWithCGPoint:CGPointMake(50, 150)], [NSValue valueWithCGPoint:CGPointMake(200, 200)]]; //ضبط موقع نهاية التحرك showView.center = CGPointMake(200, 200); //إضافة تحرك إلى طبقة layer [showView.layer addAnimation:keyFrameAnimation forKey:nil];
وفي النهاية، يتم استخدام وظيفة التسخين مع رسوم المتحركة الأساسية لإنشاء رسوم متحركة ديناميكية معقدة
دعنا نتحدث أولاً عن ما هو وظيفة التسخين، وهي مكتبة مكتوبة من قبل شخص ماهر يمكنها حساب المسار الديناميكي للرسوم المتحركة التي تُقوم بإنشائها (مثل تأثير رد الفعل)
رابط Github: https://github.com/YouXianMing/EasingAnimation
يمكنك رؤية أنواع الأنماط المتاحة في جدول وظائف التسخين في مكتبة، ويمكننا مثالًا على تأثير إسقاط الكرة
النص المسبق:
//إعداد الصورة الأصلية UIView *showView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; showView.layer.masksToBounds = نعم; showView.layer.cornerRadius = 50.f; showView.layer.backgroundColor = [UIColor redColor].CGColor; [self.view addSubview:showView]; //إنشاء تحرك بالكوافيه CAKeyframeAnimation *keyFrameAnimation = [CAKeyframeAnimation animation]; //ضبط خصائص التحرك keyFrameAnimation.keyPath = @"position"; keyFrameAnimation.duration = 4.0f; //نقطة حاسمة، هنا يتم استخدام دالة التسهيل الحسابية لتحديد مسار النقطة keyFrameAnimation.values = [YXEasing calculateFrameFromPoint:showView.center toPoint:CGPointMake(50, 300) func:BounceEaseOut frameCount:4.0f * 30]; //ضبط موقع نهاية التحرك showView.center = CGPointMake(50, 300); //إضافة تحرك إلى طبقة layer [showView.layer addAnimation:keyFrameAnimation forKey:nil];
شكرًا على قراءتك، أتمنى أن تكون قد ساعدتك، شكرًا لدعمك لموقعنا!