English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

شرح وتوضيح تأثيرات الأساس والكفاءة والتحكم في الحركة الفيزيائية باستخدام وظائف التباطؤ في iOS

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];

شكرًا على قراءتك، أتمنى أن تكون قد ساعدتك، شكرًا لدعمك لموقعنا!

تعليمية الأساس
تحب أن ترى