我试图移动一个小的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);但仍然没有。
希望有人能帮助我。
答案 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:重新排队下一个调用。我更喜欢这个使用计时器。