Перемещение UIView с циклом for - PullRequest
1 голос
/ 31 августа 2009

Я пытаюсь переместить 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 ]

4 голосов
/ 31 августа 2009

Вы не можете использовать цикл 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];
1 голос
/ 31 августа 2009

Ваш цикл for блокирует реальное перерисовывание вашего представления, которое происходит в runloop, когда вызывается drawRect вашего представления. У вас есть три варианта (и многие другие).

Два были предложены @Darren. Другой способ - вызвать executeSelector: afterDelay, передавая подпрограмму, которая перемещает представление на 100 пикселей (внутренности вашего цикла for). В конце этой процедуры вызовите executeSelector: afterDelay: для повторного вызова следующего вызова. Я предпочитаю это использовать таймер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...