سؤال

ما الذي يعتبر أفضل الممارسات لانتقالات العرض على iPhone؟

على سبيل المثال ، ViewTransitions يستخدم عينة المشروع من Apple رمز مثل:

CATransition *applicationLoadViewIn = [CATransition animation];
[applicationLoadViewIn setDuration:1];
[applicationLoadViewIn setType:kCATransitionReveal];
[applicationLoadViewIn setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]];
[[myview layer] addAnimation:applicationLoadViewIn forKey:kCATransitionReveal];

ولكن هناك أيضًا قصاصات رمز تطفو حول الشبكة التي تبدو هكذا:

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.75];
[UIView setAnimationDelegate:self];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:myview cache:YES];
[myview removeFromSuperview];
[UIView commitAnimations];

ما هو أفضل نهج؟ إذا تمكنت من تقديم مقتطف ، فسيكون موضع تقدير كبير.

ملاحظة: لم أتمكن من الحصول على النهج الثاني للعمل بشكل صحيح.

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

المحلول

من مرجع Uiviewقسم حول beginAnimations:context: طريقة:

يتم تثبيط استخدام هذه الطريقة في iPhone OS 4.0 وبعد ذلك. يجب عليك استخدام أساليب الرسوم المتحركة القائمة على الكتلة بدلاً من ذلك.

على سبيل المثال من الرسوم المتحركة القائمة على الكتلة بناءً على تعليق توم

[UIView transitionWithView:mysuperview 
                  duration:0.75
                   options:UIViewAnimationTransitionFlipFromRight
                animations:^{ 
                    [myview removeFromSuperview]; 
                } 
                completion:nil];

نصائح أخرى

لقد كنت أستخدم هذا الأخير لكثير من الرسوم المتحركة الخفيفة الوزن. يمكنك استخدامه عبر عرضين ، أو تلاشى واحدة أمام الآخر ، أو تلاشى. يمكنك تصوير منظر على آخر مثل لافتة ، يمكنك إقرار عرض أو تقلص ... أنا أتلقى الكثير من الأميال من beginAnimation/commitAnimations.

لا تعتقد أن كل ما يمكنك فعله هو:

[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:myview cache:YES];

هذه عينة:

[UIView beginAnimations:nil context:NULL]; {
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [UIView setAnimationDuration:1.0];
    [UIView setAnimationDelegate:self];
    if (movingViewIn) {
// after the animation is over, call afterAnimationProceedWithGame
//  to start the game
        [UIView setAnimationDidStopSelector:@selector(afterAnimationProceedWithGame)];

//      [UIView setAnimationRepeatCount:5.0]; // don't forget you can repeat an animation
//      [UIView setAnimationDelay:0.50];
//      [UIView setAnimationRepeatAutoreverses:YES];

        gameView.alpha = 1.0;
        topGameView.alpha = 1.0;
        viewrect1.origin.y = selfrect.size.height - (viewrect1.size.height);
        viewrect2.origin.y = -20;

        topGameView.alpha = 1.0;
    }
    else {
    // call putBackStatusBar after animation to restore the state after this animation
        [UIView setAnimationDidStopSelector:@selector(putBackStatusBar)];
        gameView.alpha = 0.0;
        topGameView.alpha = 0.0;
    }
    [gameView setFrame:viewrect1];
    [topGameView setFrame:viewrect2];

} [UIView commitAnimations];

كما ترون ، يمكنك اللعب مع Alpha ، والإطارات ، وحتى أحجام العرض. يلعب حول. قد تفاجأ بقدراتها.

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

ال CATransition يمنحك النهج مزيدًا من السيطرة وبالتالي المزيد من الأشياء التي يجب إعدادها ، على سبيل المثال. وظيفة التوقيت. كونه كائنًا ، يمكنك تخزينه في وقت لاحق ، لإعادة توجيه جميع الرسوم المتحركة الخاصة بك لتقليل التعليمات البرمجية المكررة ، إلخ.

ال UIView طرق الفصل هي طرق الراحة للرسوم المتحركة الشائعة ، ولكنها محدودة أكثر من CATransition. على سبيل المثال ، لا يوجد سوى أربعة أنواع انتقالية محتملة (Flip Left ، Flip Right ، Turl Up ، Turl Down). إذا كنت ترغب في القيام بتلاشي ، فيجب عليك إما أن تنقلب عليها CATransition's انتقال تلاشي ، أو إعداد رسوم متحركة صريحة لك UIViewألفا.

لاحظ أن CATransition على Mac OS X سيتيح لك تحديد تعسفي CoreImage تصفية لاستخدامها كإجراء انتقال ، ولكن كما هو الحال الآن ، لا يمكنك القيام بذلك على iPhone ، الذي يفتقر إليه CoreImage.

يمكننا تحريك الصور في iOS 5 باستخدام هذا الرمز البسيط.

CGRect imageFrame = imageView.frame;
imageFrame.origin.y = self.view.bounds.size.height;

[UIView animateWithDuration:0.5
    delay:1.0
    options: UIViewAnimationCurveEaseOut
    animations:^{
        imageView.frame = imageFrame;
    } 
    completion:^(BOOL finished){
        NSLog(@"Done!");
    }];

في ال UIView مستندات ، اقرأ عن هذه الوظيفة iOS4+

+ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^)(BOOL finished))completion

على أي حال ، يتم الآن تحطيم طريقة "Block" بعد أيام. سأشرح الكتلة البسيطة أدناه.

النظر في القطع أدناه. Bug2 و Bug 3 هما ImageViews. تصف الرسوم المتحركة أدناه الرسوم المتحركة بمدة ثانية واحدة بعد تأخير ثانية واحدة. يتم نقل Bug3 من مركزه إلى مركز Bug2. بمجرد الانتهاء من الرسوم المتحركة ، سيتم تسجيلها "للرسوم المتحركة المركزية!".

-(void)centerAnimation:(id)sender
{
NSLog(@"Center animation triggered!");
CGPoint bug2Center = bug2.center;

[UIView animateWithDuration:1
                      delay:1.0
                    options: UIViewAnimationCurveEaseOut
                 animations:^{
                     bug3.center = bug2Center;
                 } 
                 completion:^(BOOL finished){
                     NSLog(@"Center Animation Done!");
                 }];
}

أتمنى أن يكون هذا نظيفًا !!!

لقد وجدت برنامجًا تعليميًا جيدًا في هذا الرابط. آمل أن يكون هذا مفيدًا لشخص ما.

Uiview-Animation-Tutorial

فيما يلي رمز للرسوم المتحركة السلسة ، قد يكون مفيدًا للعديد من المطورين.
لقد وجدت هذا المقتطف من التعليمات البرمجية من هذا البرنامج التعليمي.

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[animation setAutoreverses:YES];
[animation setFromValue:[NSNumber numberWithFloat:1.3f]];
[animation setToValue:[NSNumber numberWithFloat:1.f]];
[animation setDuration:2.f];
[animation setRemovedOnCompletion:NO];

[animation setFillMode:kCAFillModeForwards];
[[self.myView layer] addAnimation:animation forKey:@"scale"];/// add here any Controller that you want t put Smooth animation.

لنحاول أن نحاول الخروج لـ Swift 3 ...

UIView.transition(with: mysuperview, duration: 0.75, options:UIViewAnimationOptions.transitionFlipFromRight , animations: {
    myview.removeFromSuperview()
}, completion: nil)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top