2012-05-03 3 views
2

Можно ли обнаружить столкновение двух UIImageViews во время движения по пути во время CAKeyFrameAnimation?Обнаружение столкновения во время CAKeyFrameAnimation

Если да, как это делается, я пробовал несколько методов, включая проверку обоих CGR для столкновения во время анимации, - но не может найти подходящий метод для выполнения метода во время CAKeyFrameAnimation и пытается обнаружить столкновение пути и UIImageView.

ответ

1

Вам необходимо получить свойства с уровня презентации. Он будет иметь наилучшее приближение информации, которая существует во время анимации. Доступ к нему:

view.layer.presentationLayer 

Посмотрите на документацию для CALayer/presentationLayer для получения более подробной информации.

Если вы хотите проверить наличие коллизий, вы должны захватить презентационный слой каждого объекта, а затем получить доступ к любым свойствам, которые вы хотите проверить для столкновения. Точный способ проверки будет зависеть от того, какой тип слоя, и хотите ли вы простую проверку hitTest или глубину. Только вы знаете, когда и какие типы конфликтов вы хотите искать.

Однако для доступа к свойствам объекта во время его анимации вам нужен презентационный слой.

EDIT

Вы можете сделать эти проверки каждый раз, когда вы хотите. Вы можете сделать это в контексте другого действия или с помощью NSTimer, чтобы сделать это через некоторый интервал. Вы даже можете использовать CADisplayLink, который, в то время как вы подключаетесь к самому таймеру анимации.

Если вы используете CADisplayLink, я предлагаю установить frameInterval с максимально возможным значением и по-прежнему делать то, что вы хотите, чтобы не влиять на производительность.

timer = [CADisplayLink displayLinkWithTarget:self selector:@selector(checkForCollisions)]; 
    // Callback is for every frame, which is 60 times per second. 
    // Only callback every 6 frames (which is ten times per second) 
    timer.frameInterval = 6; 
    [timer addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 

Не забудьте аннулировать таймер, когда закончите.

+0

Куда я могу добавить этот кусок кода для проверки? –

+0

Я хочу проверить это свойство во время анимации или проверить, соответствует ли путь последующей анимации UIImageView –

+0

. Я уже говорил вам, как это сделать. Проверьте, какие свойства важны для вас, когда захотите, но вы должны проверить их на уровне презентации, потому что это единственное место, которое отслеживает значения по мере того, как происходит анимация. –

Смежные вопросы