Ich habe eine Reihe von 8 UIView-Animationen, die direkt nach dem Laden meiner Ansicht auftreten. Im Moment erreiche ich dies mit der Delegiertenmethode animationDidStop:finished:context
, und alles funktioniert wie erwartet. Das Problem ist, dass ich für jede Animation eine neue Methode habe. Der Großteil des Codes in jeder dieser Methoden wird wiederholt, wobei sich nur die Animationsdauer und die tatsächliche Positionierung der Elemente ändern.Die beste Möglichkeit, mehrere sequenzielle UIView-Animationen auszuführen?
Ich habe versucht, eine Methode zu schaffen, und haben den Zusammenhang halten die Parameter aufgerufen werden würde benötigt in geeigneter Weise die Benutzeroberfläche zu ändern, aber es scheint rekursiv selbst über die Höhe der Zeit und ruft zu Ich nenne es:
-(void)animationDidStop:(NSString *)animationID finished:(BOOL)finished context:(void *)context{
NSNumber *number = (NSNumber *)context;
int animationStep = [number intValue];
int nextAnimationStep = animationStep + 1;
NSNumber *nextAnimationStepNumber = [NSNumber numberWithInt:nextAnimationStep];
NSLog(@"Animation Step: %i", animationStep);
CGRect firstFrame = CGRectMake(self.feedsScroll.frame.size.width * 2, 0.0f, self.secondFeedView.view.frame.size.width, self.secondFeedView.view.frame.size.height);
CGRect thirdFrame = CGRectMake(self.feedsScroll.frame.size.width * 2, 0.0f, self.thirdFeedView.view.frame.size.width, self.thirdFeedView.view.frame.size.height);
[UIView beginAnimations:nil context:nextAnimationStepNumber];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
[UIView setAnimationDelegate:self];
if (animationStep < 8)
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
NSLog(@"Beginning animations");
switch (animationStep) {
case 0:
[UIView setAnimationDuration:.3];
self.firstFeedView.view.center = CGPointMake(self.firstFeedView.view.center.x + 30, self.firstFeedView.view.center.y);
break;
case 1:
[UIView setAnimationDuration:.3];
self.firstFeedView.view.center = CGPointMake(self.firstFeedView.view.center.x - 30, self.firstFeedView.view.center.y);
break;
case 2:
[UIView setAnimationDuration:.3];
[self.secondFeedView.view setFrame:firstFrame];
break;
case 3:
[UIView setAnimationDuration:.3];
self.secondFeedView.view.center = CGPointMake(self.secondFeedView.view.center.x + 30, self.firstFeedView.view.center.y);
break;
case 4:
[UIView setAnimationDuration:.3];
self.secondFeedView.view.center = CGPointMake(self.secondFeedView.view.center.x - 30, self.firstFeedView.view.center.y);
break;
case 5:
NSLog(@"Animation step 6");
[UIView setAnimationDuration:.5];
self.firstFeedView.view.center = CGPointMake(self.firstFeedView.view.center.x - 230, self.firstFeedView.view.center.y);
self.secondFeedView.view.center = CGPointMake(self.secondFeedView.view.center.x - 230, self.firstFeedView.view.center.y);
break;
case 6:
[UIView setAnimationDuration:.5];
[self.thirdFeedView.view setFrame:thirdFrame];
break;
case 7:
[UIView setAnimationDuration:.3];
self.thirdFeedView.view.center = CGPointMake(self.thirdFeedView.view.center.x + 30, self.firstFeedView.view.center.y);
break;
case 8:
[UIView setAnimationDuration:.3];
self.thirdFeedView.view.center = CGPointMake(self.thirdFeedView.view.center.x - 30, self.thirdFeedView.view.center.y);
break;
default:
break;
}
[UIView commitAnimations];
}
Ich weiß, das ist wahrscheinlich eine naive Umsetzung. Ich bin neu in der iPhone-Entwicklung und bin auf der Suche nach einigen Best Practices, die Sie hier anwenden können. Gehe ich falsch herum?
Jede Ansicht Animation hat ein anderes Verhalten in meinem Fall. Im Prinzip rutscht einer rein, der zweite gleitet herein und springt den ersten aus dem Weg, dann gleitet der dritte leicht rechts in den Blick. Der Code, den Sie oben zeigen, führt die gleiche Animation in allen Ansichten durch, richtig? –
ja das ist richtig nur 1 Animation –