περιστρέψετε μια UIView γύρω από το κέντρο της, αλλά αρκετές φορές

ψήφοι
16

Προσπαθώ να περιστρέφεται μερικά UIViewγύρω από το κέντρο της, έτσι ώστε το απλό κώδικα πηγαίνει κάτι σαν (σε ψευδοκώδικα):

[UIView beginAnimations:@crazyRotate context:nil];
[UIView setAnimationDuration:1.0];
someview.transform = CGAffineTransformMakeRotation(angle);
[UIView commitAnimations]

τώρα αν μπορώ να ορίσω γωνία να πω M_PI / 2 το πράγμα περιστρέφεται όμορφα. αν μπορώ να οριστεί σε 2 * M_PI, καλά θα κάνει «τίποτα». Μπορώ να καταλάβω ότι η μήτρα μεταφράζεται σε κάτι που δεν κάνει τίποτα (περιστρεφόμενο 360 σημαίνει «παραμονή» κατά μία έννοια), αλλά, θέλω να το περιστρέψετε 5 φορές (σκεφτείτε μια εφημερίδα περιστροφή κλίμακα έρχονται σε σας αποτέλεσμα - δεν είμαι μεγάλη σε περιγραφή, ελπίζω κάποιος καταλαβαίνει). Έτσι, προσπάθησα προσθέτοντας γωνία ρύθμιση έως 180 deg (M_PI) και προσθέστε μια ένθετη animatationBlock. αλλά υποθέτω ότι αφού είμαι ρύθμιση την ίδια ιδιότητα ( someview.transition) και πάλι να αγνοεί κάποιο τρόπο). Προσπάθησα ρύθμιση επανάληψη μέτρηση του animation σε 2 με γωνία M_PI αλλά φαίνεται να περιστρέφεται απλά 180, πηγαίνοντας πίσω στην ευθεία θέση και, στη συνέχεια, την έναρξη και πάλι την περιστροφή.

Έτσι, είμαι λίγο έξω από ιδέες, κάθε βοήθεια ευπρόσδεκτη! --t

Δημοσιεύθηκε 06/02/2009 στις 00:49
πηγή χρήστη
Σε άλλες γλώσσες...                            


4 απαντήσεις

ψήφοι
36

Μπορείτε να χρησιμοποιήσετε το παρακάτω animation στην ιδιοκτησία στρώμα UIView σας. Έχω δοκιμάσει.

UIView *viewToSpin = ...;    
CABasicAnimation* spinAnimation = [CABasicAnimation
                                  animationWithKeyPath:@"transform.rotation"];
spinAnimation.toValue = [NSNumber numberWithFloat:5*2*M_PI];
[viewToSpin.layer addAnimation:spinAnimation forKey:@"spinAnimation"];
Απαντήθηκε 06/02/2009 στις 01:26
πηγή χρήστη

ψήφοι
6

Όπως αναφέρεται Brad Larson, μπορείτε να το κάνετε αυτό με ένα CAKeyframeAnimation. Για παράδειγμα,

CAKeyframeAnimation *rotationAnimation;
rotationAnimation = 
   [CAKeyframeAnimation animationWithKeyPath:@"transform.rotation.z"];

rotationAnimation.values = [NSArray arrayWithObjects:
                            [NSNumber numberWithFloat:0.0 * M_PI], 
                            [NSNumber numberWithFloat:0.75 * M_PI], 
                            [NSNumber numberWithFloat:1.5 * M_PI], 
                            [NSNumber numberWithFloat:2.0 * M_PI], nil]; 
rotationAnimation.calculationMode = kCAAnimationPaced;
rotationAnimation.removedOnCompletion = NO;
rotationAnimation.fillMode = kCAFillModeForwards;
rotationAnimation.timingFunction = 
   [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
rotationAnimation.duration = 10.0;

CALayer *layer = [viewToSpin layer];
[layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];

Μπορείτε να ελέγξετε τη διάρκεια της συνολικής κίνησης με την rotationAnimation.durationιδιοκτησία και την επιτάχυνση και την επιβράδυνση (και τον υπολογισμό του βήματα στο μεταξύ) με την rotationAnimation.timingFunctionιδιοκτησία.

Απαντήθηκε 29/02/2012 στις 00:37
πηγή χρήστη

ψήφοι
1
CABasicAnimation* animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
animation.fromValue = [NSNumber numberWithFloat:0.0f];
animation.toValue = [NSNumber numberWithFloat: 2*M_PI];
animation.duration = 8.0f;
animation.repeatCount = INFINITY;
[self.myView.layer addAnimation:animation forKey:@"SpinAnimation"];
Απαντήθηκε 22/06/2015 στις 15:35
πηγή χρήστη

ψήφοι
1

Να πάρει μια συνεχή περιδίνηση αποτέλεσμα είναι λίγο δύσκολο, αλλά έχω περιγράψει ένα μέσο για να το κάνει εδώ . Ναι, Πυρήνας Animation φαίνεται να βελτιστοποιήσετε μετασχηματισμών στην πλησιέστερη θέση κατάληξη μέσα στη μονάδα κύκλο. Η μέθοδος που περιγράφω εκεί αλυσίδες μερικά κινούμενα σχέδια μισή περιστροφή μαζί για να κάνουν πλήρεις περιστροφές, αν κάνετε παρατηρήσετε μια μικρή τραύλισμα στη μεταβίβαση από μία κινούμενη εικόνα στην επόμενη.

Ίσως μια CAKeyframeAnimation κατασκευάστηκε με αυτές τις αξίες μισή περιστροφή θα ήταν ο σωστός τρόπος να πάει. Στη συνέχεια, θα μπορούσε επίσης να ελέγξει την επιτάχυνση και επιβράδυνση.

Απαντήθηκε 06/02/2009 στις 14:50
πηγή χρήστη

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