2012-03-30 15 views
2

i animieren (move) eine Unterklasse UIImageView wie folgt aus:Animieren UIView - Wie man die Position verfolgt?

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration: 1]; 
[UIView setAnimationDelay:0]; 
[UIView setAnimationCurve: UIViewAnimationCurveEaseOut]; 
[UIView setAnimationBeginsFromCurrentState:YES]; 
if (position == 0) position = 1; 
if (position > 6) position--;  
self.transform = CGAffineTransformMakeTranslation(position*120, 0); 
[UIView commitAnimations]; 

dann, ich will es hervorzuheben, indem wir sie pulsieren:

CAKeyframeAnimation *bounce = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; 
CATransform3D forward = CATransform3DMakeScale(1.3, 1.3, 1); 
CATransform3D back = CATransform3DMakeScale(0.7, 0.7, 1); 
CATransform3D forward2 = CATransform3DMakeScale(1.2, 1.2, 1); 
CATransform3D back2 = CATransform3DMakeScale(0.9, 0.9, 1); 
[bounce setValues:[NSArray arrayWithObjects: 
        [NSValue valueWithCATransform3D:CATransform3DIdentity], 
        [NSValue valueWithCATransform3D:forward], 
        [NSValue valueWithCATransform3D:back], 
        [NSValue valueWithCATransform3D:forward2], 
        [NSValue valueWithCATransform3D:back2], 
        [NSValue valueWithCATransform3D:CATransform3DIdentity], 
        nil]]; 
[bounce setDuration:0.6]; 
[[super layer] addAnimation:bounce forKey:@"bounceanimation"]; 

Das alles funktioniert. Es wird um 120 Pixel verschoben, aber wenn ein Anruf den pulsierenden Code auslöst, pulsiert es an seiner ursprünglichen Position, nicht wo ich es gerade bewegt habe. warum ist das und wie kann ich es ändern?

tobias

Antwort

1

Okay, hier ist dein Problem:

self.transform = CGAffineTransformMakeTranslation(position*120, 0); 

Beachten Sie, dass Sie die Aussicht auf eine andere Stelle zu übersetzen, aber wie jede Transformation, die ursprünglichen Statistiken des Objekts bleiben gleich.

Alles, was Sie tun müssen, ist diesen Code in eine setFrame: -Methode zu übersetzen, so dass das Bild tatsächlich verschoben wird.

+0

endlich bekam es! Vielen Dank! änderte das in [self setFrame: CGRectMake (30 + position * 120, self.frame.origin.y, self.frame.size.width, self.frame.size.height)]; –

+0

Kein Problem! Freue mich zu helfen! – David

0

Keine Sorge! fügen Sie einfach diese

bounce.fillMode = kCAFillModeForwards; 

Es wird Sie Ihre Animation bleiben am Endpunkt.

Verwandte Themen