UIPanGestureRecognizer - перевод InView с помощью CATransform3D
Я пытаюсь реализовать анимацию перелистывания страниц, используя UIPanGestureRecognizer. Вот код:
- (void)handlePan:(UIPanGestureRecognizer *)recognizer {
CGPoint location = [recognizer locationInView:self.view];
CGPoint translation = [recognizer translationInView:self.view];
CGPoint velocity = [recognizer velocityInView:self.view];
[recognizer setTranslation:CGPointZero inView:recognizer.view];
switch (recognizer.state) {
case UIGestureRecognizerStateChanged:
{
self.currentTranslation = self.currentTranslation + translation.x;
//only pan left
if (self.currentTranslation > 0.0) {
self.currentTranslation = 0.0;
}
CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity;
rotationAndPerspectiveTransform.m34 = 1.0 / -2000;
self.currentRotation = self.currentTranslation/2 * M_PI / 180.0f;
//dont rotate past -90 degrees
if (self.currentRotation <= -M_PI/2) {
self.currentRotation = -M_PI/2+0.0001;
}
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, self.currentRotation, 0.0f, 1.0f, 0.0f);
float ypos = self.view.layer.position.y;
self.view.layer.anchorPoint = CGPointMake(0, 0.5);
self.view.layer.position = CGPointMake(0, ypos);
self.view.layer.transform = rotationAndPerspectiveTransform;
break;
}
default:
break;
}
}
Анимация работает, и страница поворачивается, когда я перетаскиваю влево. Однако, даже когда я двигаюсь жестом, медленным шагом, страница начинает поворачиваться быстрее. Я хочу, чтобы при повороте касания страница поворачивалась "линейно", как в приложении Flipboard. Как я могу контролировать перевод, чтобы он не ускорялся?
1 ответ
Перевод накоплен. Добавьте это в свой код после случая UIGestureRecognizerStateChanged.
[recognizer setTranslation:CGPointZero inView:self.view];