2011-11-10 4 views
1

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

checkForCollision 

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

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

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

У меня есть кнопка, анимированы, как это:

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

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

+0

Возможный дубликат [анимация анимации UIView во время анимации] (http://stackoverflow.com/questions/6545545/uiview-animation-determine-center-during-animation) – jrturton

ответ

2

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

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

UIView animation determine center during animation

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