iPhone UIView Animation Βέλτιστων Πρακτικών

ψήφοι
140

Τι είναι θεωρείται βέλτιστη πρακτική για την εμψύχωση θέα μεταβάσεις για το 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];

Ποια είναι η καλύτερη προσέγγιση; Αν θα μπορούσε να παρέχει ένα απόσπασμα καθώς και ότι θα ήταν πολύ ευπρόσδεκτη.

ΣΗΜΕΙΩΣΗ: Έχω ήταν σε θέση να πάρει την δεύτερη προσέγγιση για να λειτουργήσει σωστά.

Δημοσιεύθηκε 10/03/2009 στις 14:52
πηγή χρήστη
Σε άλλες γλώσσες...                            


9 απαντήσεις

ψήφοι
117

Από το UIView αναφοράς ενότητα «s για τη beginAnimations:context:μέθοδο:

Η χρήση αυτής της μεθόδου αποθαρρύνεται στο iPhone OS 4.0 ή νεότερη έκδοση. Θα πρέπει να χρησιμοποιείτε τις μεθόδους animation μπλοκ που βασίζεται αντ 'αυτού.

Π.χ. των μπλοκ με βάση Κίνηση βασισμένη σε σχόλιο του Tom

[UIView transitionWithView:mysuperview 
                  duration:0.75
                   options:UIViewAnimationTransitionFlipFromRight
                animations:^{ 
                    [myview removeFromSuperview]; 
                } 
                completion:nil];
Απαντήθηκε 09/08/2010 στις 16:02
πηγή χρήστη

ψήφοι
69

Έχω χρησιμοποιήσει το τελευταίο για πολλά ωραίο ελαφρύ κινούμενα σχέδια. Μπορείτε να το χρησιμοποιήσετε εναλλαχθείτε δύο απόψεις, ή ξεθωριάζει ένα στο μπροστά από το άλλο, ή να ξεθωριάζει έξω. Μπορείτε να πυροβολήσει μια άποψη πάνω στην άλλη σαν ένα πανό, μπορείτε να κάνετε ένα τέντωμα άποψη ή να συρρικνωθεί ... Παίρνω πολλά χιλιόμετρα έξω από 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. Για παράδειγμα, υπάρχουν μόνο τέσσερις πιθανές μορφές μετάβασης (αναστροφή αριστερά, γυρίστε δεξιά, διπλώστε το σώμα σας, διπλώστε προς τα κάτω). Αν ήθελε να κάνει ένα fade in, θα πρέπει είτε να σκάψει κάτω για να CATransition'sξεθωριάζει μετάβαση, ή να συστήσει μια σαφή κίνηση του σας UIView«s alpha.

Να σημειωθεί ότι CATransitionγια το Mac OS X θα σας αφήσει να καθορίσετε μια αυθαίρετη CoreImageφίλτρο για να το χρησιμοποιήσετε ως μια μετάβαση, αλλά όπως είναι τώρα δεν μπορείτε να το κάνετε αυτό για το iPhone, το οποίο στερείται CoreImage.

Απαντήθηκε 10/03/2009 στις 16:24
πηγή χρήστη

ψήφοι
26

Μπορούμε να εμψυχώσει εικόνες σε 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!");
    }];
Απαντήθηκε 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

Ούτως ή άλλως η μέθοδος «Block» είναι προτίμησα τώρα-α-ημερών. Θα σας εξηγήσω το απλό μπλοκ κάτω.

Σκεφτείτε το snipped παρακάτω. bug2 και bug 3 είναι imageViews. Το παρακάτω animation περιγράφει μια κινούμενη εικόνα με 1 διάρκεια δεύτερης μετά από μία καθυστέρηση 1 δευτερολέπτου. Η bug3 μετακινείται από το κέντρο του στο κέντρο bug2 του. Μόλις η κίνηση έχει ολοκληρωθεί, θα πρέπει να είστε συνδεδεμένοι «Κέντρο Κινούμενων Σχεδίων Done!».

-(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-animation-φροντιστήριο

Απαντήθηκε 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

ας μην προσπαθήσουμε και ολοκλήρωση της παραγγελίας για Swift 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