使用for循环移动UIView

时间:2009-08-31 00:50:00

标签: iphone uiview

我试图移动一个小的UIView。我的for循环只会让UIView下降100点。

除非在循环结束之前不移动,否则这样做。

我尝试过设置

[self.view setNeedsDisplay]和[myView setNeedsDisplay],我也把这个函数放在nstimer和nsthread中,如下所示

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

[NSTimer scheduledTimerWithTimeInterval:1/15
     target:self selector:@selector(doStuff)
         userInfo:nil 
     repeats:NO] ;

但它只是没有“动画”。

每次移动视图后,我都会睡觉(1);但仍然没有。

希望有人能帮助我。

2 个答案:

答案 0 :(得分:4)

您不能使用for循环。你需要设置一个重复计时器;每次定时器触发时,您都会将视图向下移动 x 像素,并在视图处于最终位置时取消定时器。

但你应该考虑使用核心动画:

[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];

答案 1 :(得分:1)

当你的视图的drawRect被调用时,你的for循环会阻止在runloop中发生的视图的实际重绘。你有三个选择(还有更多)。

@Darren提出了两个建议。另一个是调用performSelector:afterDelay传递移动视图的例程100像素(for循环的内部)。在该例程结束时,调用performSelector:afterDelay:重新排队下一个调用。我更喜欢这个使用计时器。