2010-07-31 5 views
8

Dans une application présentant des blocs de texte, la taille de la police augmente lorsque l'appareil est orienté en mode paysage. Je n'aime pas la façon dont il fait l'animation entière et saute soudainement à la nouvelle taille, donc je voudrais animer le changement de taille au cours de la rotation.iOS - L'animation de la modification de la taille du texte dans UILabel ou UITextView?

Je lis quelque part que jeter ce changement dans un bloc d'animation UIView ne fonctionne pas parce que la propriété de la police ne sont pas animable, alors quelles sont mes options pour ce faire?

Pour ma mise en œuvre spécifique, je ne mets pas simplement à l'échelle le UILabel/UITextView tel quel; Les limites de la boîte augmentent plus (proportionnellement) que la taille de la police, de sorte qu'il y aura un retour dans le texte. C'est bien par moi.

Éditer: Je ferais bien de simplement mettre à l'échelle le UITextView. En outre, je considérais "animer" manuellement: J'ai une méthode qui expose mes vues et ajuste pour la taille de la police. Si je savais quand la rotation allait commencer et la durée de l'animation, je pourrais la chronométrer pour qu'elle affiche une taille de police intermédiaire ou deux au milieu de l'animation. Toute aide pour les obtenir serait appréciée.

+1

Avez-vous réussi à réaliser ce que vous vouliez faire? Pourriez-vous accepter l'une des réponses pour fermer la question? – MiKL

Répondre

6

Si je savais que lorsque la rotation était d'environ pour commencer, et la durée de l'animation ...

Drôle, vous devriez le mentionner. Juste avant le début de l'animation, votre contrôleur de vue recevra un message willAnimateRotationToInterfaceOrientation:duration: qui vous donnera les informations exactes dont vous avez besoin.

1

Modifier la taille de la police lorsque didAnimateFirstHalfOfRotationToInterfaceOrientation: est appelée. De cette façon, l'utilisateur ne verra pas le changement une fois la rotation terminée. Il serait assez difficile de voir la taille de la police changer alors que la rotation est en cours!

+0

Cette méthode n'est appelée que si vous activez l'animation en deux étapes, ce qui nécessite des tâches manuelles supplémentaires que je souhaite vraiment éviter. Mais bonne idée de toute façon! – kbanman

6

Une option consiste à masquer l'ancien texte, à modifier la taille de la police et à l'aplanir. La propriété de police peut ne pas être animable, mais alpha l'est. Puisque alpha est une propriété de UIView, vous pouvez traiter toutes vos vues contenant du texte de la même façon: UILabel, UITextView, etc.

+0

J'aime cette méthode. – Moshe

4

Une façon de procéder pourrait être à:

  1. Créer un CAKeyframeAnimation
  2. Définir l'échelle et la rotation que vous voulez atteindre au cours de cette animation à l'aide d'un ensemble d'objets CATransform3D
  3. Ajouter ces transformations à votre animation de l'image-clé
  4. Envoyez le message addAnimation à l'objet de la couche d'étiquettes: [[label layer] addAnimation];

serait ici un exemple de code en supposant yourLabel est le UILabel que vous voulez à l'échelle et faites pivoter:

CAKeyframeAnimation *scale = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; 

CATransform3D scaleUp = CATransform3DMakeScale(1.5, 1.5, 1); // Scale in x and y 
CATransform3D rotationScaled = CATransform3DRotate (scaleUp, 90, 0, 0, 1); // Rotate the scaled font 

[scale setValues:[NSArray arrayWithObjects: 
[NSValue valueWithCATransform3D:CATransform3DIdentity], 
[NSValue valueWithCATransform3D:rotationScaled], 
nil]]; 

// set the duration 
[scale setDuration: 1.0]; 

// animate your label layer 
[[yourLabel layer] addAnimation:scale forKey:@"scaleText"]; 

Cela est généralement comment un texte rebondissant autour serait animé par exemple.

Vous pouvez démarrer cette opération lorsque l'appareil commence à pivoter et récupérer l'animation une fois la rotation terminée, afin que vous puissiez mettre à jour votre étiquette avec la bonne échelle/position.

Vous aurez besoin d'un réglage pour trouver la synchronisation et la rotation appropriées.

+0

@kelso. Avez-vous réfléchi/essayé? – MiKL

+0

Pour obtenir le bon timing et la bonne rotation, vous pouvez utiliser la méthode décrite ci-dessus: 'willAnimateRotationToInterfaceOrientation: durée:' – MiKL

+0

@ kelso.b. Avez-vous déjà réussi à faire ce que vous vouliez accomplir? Que diriez-vous d'accepter l'une des réponses aussi bonne que votre question peut être fermée? À votre santé. Mikl – MiKL

Questions connexes