2010-01-04 5 views
0

Je développe un jeu dans lequel je réduis la taille d'image d'un imageView. Lorsque j'introduis une condition en utilisant la boucle while, je ne suis pas capable de voir l'image réduire graduellement sa taille, puisqu'elle saute immédiatement au résultat final. Donc, je veux introduire un délai après chaque instruction afin que je puisse voir l'effet de sa réduction de taille petit à petit. Je ne peux pas utiliser la minuterie car elle a besoin de moi pour spécifier une fonction à exécuter après cet intervalle de temps.Comment introduire un délai dans ma fonction?

while(ravanImage1.frame.origin.y>=end.y) 
{ 
ravanImage1.frame=CGRectMake(150,((ravanImage1.frame.origin.y)-5),q,z); 

if(ravanImage1.center.y>=300&&ravanImage1.center.y<=370) 
{ 
    q=60; 
    z=60; 
    ravanImage1.frame=CGRectMake(150,((ravanImage1.frame.origin.y)-5),q,z); 
} 

if(ravanImage1.center.y>=230&&ravanImage1.center.y<=299) 
{ 
    q=40; 
    z=40; 
    ravanImage1.frame=CGRectMake(150,((ravanImage1.frame.origin.y)-5),q,z); 
} 

if(ravanImage1.center.y>=150&&ravanImage1.center.y<=229) 
{  
    q=20; 
    z=20; 
    ravanImage1.frame=CGRectMake(150,((ravanImage1.frame.origin.y)-5),q,z); 
} 
} 

Je souhaite introduire le délai après chaque changement de trame.

Quelqu'un peut-il m'aider s'il vous plaît?

+0

Le framework CoreAnimation a été créé explicitement pour gérer ces situations. –

+0

Je crois que ce problème a été résolu dans votre question précédente sur le sujet: http://stackoverflow.com/questions/1998754/after-applying-while-condition-code-starts-acting-differently –

+0

Oui, vous avez raison Brad! Merci pour votre aide .. – neha

Répondre

1

Si vous avez juste besoin de faire une pause le changement au cours du développement, utilisez les points d'arrêt du débogueur.

Pour la version, vous devez utiliser un bloc d'animation pour effectuer les modifications. Créez un bloc distinct pour chaque modification possible, puis définissez la durée de l'animation sur ce que vous souhaitez.

En règle générale, on ne change le cadre d'une vue directement plus à moins que vous souhaitez qu'elle soit instantanée. Des animations existent précisément à cet effet, c'est-à-dire pour créer un effet qui communique un changement d'état d'affichage à l'utilisateur. Ils ne sont pas juste des bonbons pour les yeux.

Si pour une raison quelconque, vous ne voulez pas utiliser des animations, vous pouvez déplacer chaque changement de taille dans sa propre méthode, puis appeler chaque méthode avec une minuterie. Vous pouvez appeler la première méthode, qui définirait une minuterie pour appeler la seconde, qui définirait un minuteur pour appeler le troisième et ainsi de suite.

+0

Je ne veux vraiment pas utiliser les animations car elles créent des problèmes dans mon application. La dernière méthode semble bonne. Je vais essayer ... – neha

+1

Vous devez avoir beaucoup de travail supplémentaire alors. L'API est basée autour d'animations. – TechZen

0

Il faut donc utiliser la minuterie et lui donner une fonction qui prendra la bonne quantité de temps d'exécution, mais ont aucun impact sur votre écran? Peut-être exécuter une longue boucle de calculs sans signification au bon endroit dans votre programme?

+0

Merci, Mark! Je vais essayer celui-ci .. – neha

2

Comment l'utilisation

[NSThread sleepForTimeInterval:] 

inbetween chaque instruction?

+0

Non, je ne peux pas utiliser cela comme l'exécution complète de mon programme se passe sur un seul thread. Ce que je veux arrêter est juste une partie de celui-ci. – neha

Questions connexes