2009-08-17 6 views
1

J'ai un cas où je dessine des formes, par exemple un triangle (points A, B, C). Maintenant je veux l'animer afin que les points A, B, C se déplacent vers le point X, Y, Z. (Je dis juste sur le clic de bouton)iPhone développement - dessin de base et question d'animation

J'utilise une méthode drawRect: dans ma vue personnalisée pour dessiner. Je ne veux pas que mon regard bouge, je préfère que mon dessin bouge (parce que j'ai plusieurs dessins).

Des pointeurs? Des articles relatifs?

Cordialement, Mustafa

Répondre

1

Core Animation est une bonne solution pour ce genre de chose. Vous avez CAShapeLayer qui vous permet de dessiner des formes en fonction d'un chemin et vous pouvez animer en utilisant une animation de base ou une animation d'image clé. Vous pouvez faire quelque chose comme ceci dans votre bouton clic:

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"]; 
[animation setFromValue:[NSValue valueWithCGPoint:CGPointMake(0.0, 0.0)]]; 
[animation setToValue:[NSValue valueWithCGPoint:CGPointMake(320.0, 480.0)]]; 
[animation setDuration:2.0f]; 
[shapeLayer addAnimation:animation forKey:@"positionAnimation"]; 

Cette animerez la couche du point 0,0, 0,0 (coin supérieur gauche) à 320,0, 480,0 (coin inférieur droit) au cours de deux secondes . Lorsque vous ajoutez l'animation à votre calque, la lecture commence immédiatement. Si vous cherchez à faire pivoter l'animation (était pas sûr du poste), vous pouvez le faire:

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

[rotationAnimation setFromValue:DegreesToNumber(0)]; 
[rotationAnimation setToValue:DegreesToNumber(360)]; 
[rotationAnimation setDuration:2.0f]; 
[rotationAnimation setRepeatCount:10000]; // keep spinning 

[shapeLayer addAnimation:rotationAnimation forKey:@"rotate"]; 

Le DegreesToNumber est une fonction d'aide qui convertit des degrés en radians et renvoie un objet NSNumber:

CGFloat DegreesToRadians(CGFloat degrees) 
{ 
    return degrees * M_PI/180; 
} 

NSNumber* DegreesToNumber(CGFloat degrees) 
{ 
    return [NSNumber numberWithFloat: 
      DegreesToRadians(degrees)]; 
} 

Il y a beaucoup d'articles sur le web sur Core animation, mais cela devrait vous aider à démarrer. Faites-moi savoir si vous avez besoin d'éclaircissements.

+0

Merci Matt, je vais le tester et vous laisser savoir comment ça se passe. – Mustafa