Ответ 1
Виды эффектов, которые вы описываете как имитирующие король силы тяжести/инерции, могут быть созданы с помощью облегчения (начинаются быстро, заканчиваются медленно) и облегчают (начинаются медленные, быстро заканчивающиеся) функции синхронизации.
Поддержка для облегчения и упрощения доступна в 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>
}
}