UIButton.frame при использовании анимации UIView - PullRequest
1 голос
/ 10 ноября 2011

Я использую анимацию UIView для перемещения кнопки по экрану.Пока он движется, у меня NSTimer работает метод

checkForCollision

, который выглядит следующим образом:

for(UIButton* b in squares)
    if(CGRectIntersectsRect(playerSquare.frame, b.frame)) {
        [self showEndMenu];
        break;
    }

с интервалом 0,05;Я хотел бы, чтобы этот метод уведомлял меня всякий раз, когда кнопка перемещается по пути другого.Похоже, проблема в том, что когда он проверяет кадр UIButton b, он видит только кадр, к которому движется кнопка.

У меня кнопка анимируется следующим образом:

[UIView beginAnimations:@"" context:nil];
[UIView setAnimationDuration:1.3];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
view.center = destPoint;
[UIView commitAnimations];

Итак, если destPoint пересекает CGRect playerSquare.frame, вызывается [self showEndMenu].Но если кадр / позиция, в которой кнопка находится, скажем, на полпути анимации, пересекается playerSquare, [self showEndMenu] не вызывается.Я не знаю, как решить это;Я могу предоставить больше кода, если это будет необходимо.Спасибо!

1 Ответ

2 голосов
/ 10 ноября 2011

Перемещение видов путем анимации их свойств немедленно устанавливает свойство в окончательное значение, как вы уже нашли.

Вы можете получить промежуточные значения, используя основные слои анимации (см. http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Animation_Types_Timing/Articles/PropertyAnimations.html#//apple_ref/doc/uid/TP40006672-SW1 печать по телефону, извините за плохую ссылку), но, честно говоря, я не получил никакого опыта в этом.Если кто-нибудь сделает это, было бы здорово увидеть это здесь.На самом деле, быстрый поиск поднял этот вопрос, с точным ответом, который вы ищете, я думаю :)

UIView анимация определяет центр во время анимации

ВашДругой вариант - итеративно перемещать кнопку, используя таймеры, точно так же, как объекты перемещаются с помощью cocos2d, поэтому, когда вы каждый раз проверяете положение, ваши кнопки находятся там, где они есть на самом деле.Однако таким образом вы должны рассчитать путь самостоятельно.

...