Эффекты, которые вы описываете как имитирующие король гравитации / инерции, могут быть получены с помощью функций синхронизации замедления (начало быстрое, медленное конец) и замедления (медленное начало, быстрое завершение).
Поддержка замедления и ослабления доступна в iOS, поэтому я не думаю, что вам нужна какая-либо внешняя библиотека или тяжелая работа (хотя, как вы можете себе представить, ваш эффект потребует много тонкой настройки).
Это оживит перевод объекта в заданную позицию с эффектом замедления:
[UIView animateWithDuration:2.0 delay:0
options:UIViewAnimationOptionCurveEaseOut
animations:^ {
self.image.center = finalPosition;
}
completion:NULL];
}
Если вы обрабатываете свой жест с помощью UIPanGestureRecognizer
, распознаватель жестов предоставит вам две важные данные для расчета конечной позиции: velocity
и translation
, которые представляют соответственно, насколько быстро и на сколько был перемещен объект .
Вы можете установить в вашем представлении распознаватель жестов панорамирования (я думаю, это будет объект, который вы хотели бы анимировать) следующим образом:
UIPanGestureRecognizer* panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanFrom:)];
[yourView addGestureRecognizer:panGestureRecognizer];
[panGestureRecognizer release];
А затем обработайте анимацию в вашем обработчике:
- (void)handlePanFrom:(UIPanGestureRecognizer*)recognizer {
CGPoint translation = [recognizer translationInView:recognizer.view];
CGPoint velocity = [recognizer velocityInView:recognizer.view];
if (recognizer.state == UIGestureRecognizerStateBegan) {
} else if (recognizer.state == UIGestureRecognizerStateChanged) {
<track the movement>
} else if (recognizer.state == UIGestureRecognizerStateEnded) {
<animate to final position>
}
}