2009-08-31 20 views
1

小さいUIViewを移動しようとしています。私のforループはUIViewを100ポイント下に移動します。forループを使用してUIViewを移動する

これは、ループが終了するまで動きません。

[NSThread detachNewThreadSelector:@selector(doStuff) toTarget:self withObject:nil]; 

[NSTimer scheduledTimerWithTimeInterval:1/15 
    target:self selector:@selector(doStuff) 
     userInfo:nil 
    repeats:NO] ; 
の下に見えるように私は、[self.view setNeedsDisplay]

を設定し、[MYVIEW setNeedsDisplay]試してみましたが、私は、nstimerとnsthread内の機能をも入れています

しかし、単にアニメーション化されません。

ビューを移動するたびに、私はスリープ(1)します。まだ何もない。

誰でも私を助けることができます。

答えて

1

あなたのループ・ブロックのためのあなたのビューののdrawRectが呼び出される実行ループの中で起こるビュー、実際の再描画。 3つのオプションがあります(さらに多くのオプションがあります)。

2つは@Darrenによって提案されました。別の方法は、performSelector:afterDelayを呼び出して、ビューを100ピクセル(forループの内部)に移動するルーチンに渡すことです。そのルーチンの最後に、performSelector:afterDelay:を呼び出して、次の呼び出しを再キューに入れます。私はタイマーを使うのが好きです。

+0

ありがとうございました。 forループを削除した後、タイマーとブーリアン(移動する必要があります)を実行した後、すべてが正常に動作します。なぜ私がforループを試していたのか、私の人生は理解できません。 ありがとうございます –

4

forループは使用できません。繰り返しタイマーを設定する必要があります。タイマーが起動するたびにビューをxピクセル下に移動し、ビューが最終位置に来たらタイマーをキャンセルします。

しかし、あなたはCore Animationの使用を検討してください:

[UIView beginAnimations:@"MyAnimation" context:nil]; 
[UIView setAnimationBeginsFromCurrentState:YES]; 
[UIView setAnimationDuration:5.0]; // 5 seconds 

CGRect frame = myView.frame; 
frame.origin.y += 100.0; // Move view down 100 pixels 
myView.frame = frame; 

[UIView commitAnimations];