iPhone UIView एनीमेशन बेस्ट प्रैक्टिस

वोट
140

iPhone पर दृश्य संक्रमण एनिमेट के लिए सबसे अच्छा अभ्यास माना जाता है क्या है?

उदाहरण के लिए, ViewTransitionsसेब से नमूना परियोजना की तरह कोड का उपयोग करता है:

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

सबसे अच्छा तरीका क्या है? आप एक टुकड़ा के साथ-प्रदान कर सकता है, तो यह बहुत सराहना की होगी।

नोट: मैं सही ढंग से काम करने के लिए दूसरा दृष्टिकोण प्राप्त करने में असमर्थ किया गया है।

10/03/2009 को 14:52
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


9 जवाब

वोट
117

से UIView संदर्भ के बारे में खंड beginAnimations:context:विधि:

इस विधि का उपयोग 4.0 और बाद में iPhone OS में हतोत्साहित किया जाता है। आप ब्लॉक आधारित एनीमेशन तरीकों के बजाय का उपयोग करना चाहिए।

ब्लॉक आधारित एनीमेशन के उदाहरण पर टॉम की टिप्पणी आधारित

[UIView transitionWithView:mysuperview 
                  duration:0.75
                   options:UIViewAnimationTransitionFlipFromRight
                animations:^{ 
                    [myview removeFromSuperview]; 
                } 
                completion:nil];
09/08/2010 को 16:02
का स्रोत उपयोगकर्ता

वोट
69

मैं अच्छा हल्के एनिमेशन का एक बहुत के लिए बाद उपयोग किया गया है। आप इसे दो बार देखा गया crossfade उपयोग कर सकते हैं, या किसी अन्य के सामने में एक हो जाते हैं, या इसे बाहर नहीं हो पाती। आप एक बैनर की तरह दूसरे पर एक दृश्य शूट कर सकते हैं, तो आप एक दृश्य खिंचाव कर सकते हैं या हटना कर सकते हैं ... मैं से बाहर लाभ का एक बहुत हो रही है 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];

आप देख सकते हैं, तो आप अल्फा, फ्रेम, और एक दृश्य का भी आकारों के साथ खेल सकते हैं। मूर्ख या गैर जिम्मेदाराना व्यवहार। आप अपनी क्षमताओं के साथ आश्चर्य हो सकता है।

04/05/2009 को 09:22
का स्रोत उपयोगकर्ता

वोट
52

अंतर नियंत्रण की सीमा को आप एनीमेशन से अधिक की जरूरत हो रहा है।

CATransitionदृष्टिकोण आपको अधिक नियंत्रण है और इसलिए अधिक बातें, स्थापित करने के लिए देता है जैसे। समय समारोह। एक वस्तु होने के नाते, आप इसे बाद के लिए स्टोर कर सकते हैं, आदि डुप्लिकेट किए गए कोड को कम करने के लिए इसे अपने सभी एनिमेशन बात करने के लिए refactor

UIViewवर्ग तरीकों आम एनिमेशन के लिए सुविधा तरीके हैं, लेकिन अधिक से अधिक सीमित हैं CATransition। उदाहरण के लिए, वहाँ केवल चार संभावित संक्रमण प्रकार (फ्लिप बाएँ, दाएँ फ्लिप, सिकुड़कर, नीचे कर्ल) कर रहे हैं। आप में एक फीका करना चाहता था, तो आप करना होगा या तो करने के लिए नीचे खुदाई CATransition'sसंक्रमण नहीं हो पाती है, या अपने की एक स्पष्ट एनीमेशन की स्थापना UIViewकी अल्फा।

ध्यान दें कि CATransitionमैक ओएस एक्स पर आप एक मनमाना निर्दिष्ट करने देगा CoreImageएक संक्रमण के रूप में उपयोग करने के लिए फिल्टर, लेकिन के रूप में यह अब खड़ा है आप iPhone है, जो अभाव है पर ऐसा नहीं कर सकते CoreImage

10/03/2009 को 16:24
का स्रोत उपयोगकर्ता

वोट
26

हम इस सरल कोड का उपयोग कर 5 ios में छवियों चेतन कर सकते हैं।

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!");
    }];
20/01/2012 को 10:10
का स्रोत उपयोगकर्ता

वोट
8

में UIViewडॉक्स, एक के लिए इस समारोह के बारे में पढ़ा है iOS4 +

+ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^)(BOOL finished))completion
11/10/2011 को 11:19
का स्रोत उपयोगकर्ता

वोट
6

वैसे भी "ब्लॉक" विधि preffered है अब आजकल। मैं नीचे सरल ब्लॉक की व्याख्या करेगा।

नीचे कतरना पर विचार करें। bug2 और बग 3 imageViews हैं। नीचे एनिमेशन 1 सेकंड की देरी के बाद 1 सेकंड की अवधि के साथ एक एनीमेशन वर्णन करता है। 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!");
                 }];
}

आशा है कि साफ है !!!

08/03/2012 को 05:12
का स्रोत उपयोगकर्ता

वोट
4

मैं इस लिंक में एक अच्छा ट्यूटोरियल पाया। उम्मीद है कि यह कुछ एक के लिए उपयोगी होगा।

UIView-एनीमेशन-ट्यूटोरियल

05/10/2012 को 08:08
का स्रोत उपयोगकर्ता

वोट
2

यहाँ कोड चिकनी एनीमेशन के लिए, कई डेवलपर्स के लिए उपयोगी हो सकता है।
मैं इस ट्यूटोरियल से कोड के इस स्निपेट पाया।

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.
03/07/2013 को 08:19
का स्रोत उपयोगकर्ता

वोट
1

के लिए प्रयास करें और स्विफ्ट 3 के लिए चेकआउट करते हैं ...

UIView.transition(with: mysuperview, duration: 0.75, options:UIViewAnimationOptions.transitionFlipFromRight , animations: {
    myview.removeFromSuperview()
}, completion: nil)
15/03/2017 को 12:50
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more