سؤال

لدي زر مخصص على وحدة تحكم عرض في التسلسل الهرمي وحدة تحكم الملاحة ، أنه عند الضغط عليه ، والملوثات العضوية الثابتة وحدة تحكم عرض مرئية.

أريد استخدام إيفيو transform خاصية لتحريك إغلاق وحدة تحكم العرض.وهو يعمل ، ولكن إذا كنت تستخدم 'بوبفيوكونترولرانيماتد: نعم' ، الشريحة اليسرى الافتراضية من الرسوم المتحركة لا يزال هناك ، على الرغم من بلدي تحويل مخصص يعمل أيضا.

إذا قمت بتعيين popViewControllerAnimated:NO لا يحرك أي شيء على الإطلاق.

نظرت أيضا في استخدام CATransition الذي يعمل عندما يكون لدي popViewControllerAnimated تعيين إلى NO, ، ولكن لا يوجد تأثير "تكبير" يعد جزءا من واجهة برمجة التطبيقات العامة ، ولا أريد استخدام التأثير الخاص.مرشحات مخصصة هي أيضا غير متوفرة لفون ، فقط نظام التشغيل العاشر.

لذا أعتقد أن أسئلتي هي:

1) هل هناك طريقة لإزالة الشريحة اليسرى في الانتقال الافتراضي حتى الآن لا تزال لديها الرسوم المتحركة المخصصة باستخدام transform?

2) بعض الطرق لاستخدام مرشح مخصص ل CATransition?

3) إذا كنت تستخدم أبي الخاص لتأثير التكبير كيف من المرجح أن أبل إرم بلدي التطبيق في بن الرفض?

هل لدى أي شخص حل أنا تطل?

هل كانت مفيدة؟

المحلول

لقد فعلت شيئا مشابها لما تصفه ، أي.تغيير الرسوم المتحركة الافتراضية للبوب ودفع للعرض في إينافيغاتيونكونترولر.

والفكرة هي لتعطيل الرسوم المتحركة الافتراضية للكائن واستبدالها مع الرسوم المتحركة الخاصة بك.لقد أنشأت فئة جديدة ل إينافيغاتيونكونترولر وتستخدم وظيفة مماثلة لتلك أدناه.

 - (void) altAnimatePopViewControllerAnimated:(BOOL)animated
 {
[CATransaction begin];

CATransition *transition;
transition = [CATransition animation];
transition.type = kCATransitionPush;          // Use any animation type and subtype you like
transition.subtype = kCATransitionFromTop;
transition.duration = 0.3;

CATransition *fadeTrans = [CATransition animation];
fadeTrans.type = kCATransitionFade;
fadeTrans.duration = 0.3;


[CATransaction setValue:(id)kCFBooleanTrue
                 forKey:kCATransactionDisableActions];

[[[[self.view subviews] objectAtIndex:0] layer] addAnimation:transition forKey:nil];
[[[[self.view subviews] objectAtIndex:1] layer] addAnimation:fadeTrans forKey:nil];



[self  popViewControllerAnimated:YES];
[CATransaction commit];
   }

لاستخدام مجرد استخدام التعليمات البرمجية

   [self.navigationController altAnimatePopViewControllerAnimated:YES];

من أجل القيام دفعة مجرد خلق وظيفة أخرى مماثلة وعكس الرسوم المتحركة.

انها ليست مثالية لكنها تعمل.عند اختيار أنواع الرسوم المتحركة المختلفة تلعب حولها مع سوبفيوس مختلفة يؤلف شريط التنقل / وحدة تحكم للحصول على الكمال.

أخذت بلدي تماما الأبيض من أجل التوصل إلى هذا ، لذلك استخدامه بحكمة :)

******* تحرير

حاول استبدال انتقال الدفع بهذا (لم أجربه بنفسي):

  CAKeyframeAnimation *scale = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale"];
  scale.duration = duration;
  scale.values = [NSArray arrayWithObjects:[NSNumber numberWithFloat:.5f],
              [NSNumber numberWithFloat:1.2f],
              [NSNumber numberWithFloat:.85f],
              [NSNumber numberWithFloat:1.f],
              nil];

هذا وسوف تفعل البوب في ، أي.سيكون العرض أكبر قبل أن يستقر في الحجم الصحيح.العب بالقيم الموجودة في المصفوفة للتحكم في منحنى الرسوم المتحركة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top