Перемещение объекта случайным образом по экрану - PullRequest
6 голосов
/ 17 февраля 2011

Я пытаюсь анимировать кнопку UIB для случайного перемещения по экрану в разных направлениях.Код ниже является своего рода работой.Кнопка начнет двигаться по случайной траектории, однако затем она просто будет двигаться вперед и назад между точкой A и точкой B.

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:1]; 
[UIView setAnimationRepeatCount:1000]; 
[UIView setAnimationRepeatAutoreverses:YES]; 

CGFloat x = (CGFloat) (arc4random() % (int) self.view.bounds.size.width); 
CGFloat y = (CGFloat) (arc4random() % (int) self.view.bounds.size.height); 

CGPoint squarePostion = CGPointMake(x, y); 
button.center = squarePostion; 

[UIView commitAnimations];

Как мне заставить ее продолжать двигаться к новой случайной точкекаждый раз, когда он меняет направление, вместо того, чтобы просто двигаться вперед и назад?

Спасибо!

1 Ответ

7 голосов
/ 17 февраля 2011

попробуйте это:

    -(void)animationLoop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context { 

        [UIView beginAnimations:nil context:nil]; 
        [UIView setAnimationDuration:1]; 
// remove:
      //  [UIView setAnimationRepeatCount:1000]; 
      //  [UIView setAnimationRepeatAutoreverses:YES]; 

        CGFloat x = (CGFloat) (arc4random() % (int) self.view.bounds.size.width); 
        CGFloat y = (CGFloat) (arc4random() % (int) self.view.bounds.size.height); 

        CGPoint squarePostion = CGPointMake(x, y); 
        button.center = squarePostion; 
// add:
     [UIView setAnimationDelegate:self]; // as suggested by @Carl Veazey in a comment
        [UIView setAnimationDidStopSelector:@selector(animationLoop:finished:context:)];

        [UIView commitAnimations];
    }

и просто добавьте счетчик (int) внутри метода, чтобы проверить, выполняется ли он более 1000 раз, если хотите остановить его ...

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