Ответ 1
Посмотрите здесь. Это учебник UIGestureRecognizer
, который даст вам основы для обработки жестов и настроек. После того как вы научились основам, очень легко выполнить то, что вы хотите. Все, что вам нужно, - проверить положение обзора после завершения панорамирования, чтобы отправить его в правильное положение. Посмотрите этот другой учебник на UIScrollViews
, он может помочь вам найти путь через вторую часть.
Оба учебника взяты из raywenderlich.com, возможно, самого полезного сайта iOS, который я знаю.
Ниже приведен код кода вашего метода handlePan:
, с которым вы можете работать:
- (IBAction)handlePan:(UIPanGestureRecognizer *)recognizer {
CGPoint translation = [recognizer translationInView:_myScroll];
recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x,
recognizer.view.center.y + translation.y);
if (recognizer.state == UIGestureRecognizerStateEnded) {
// Check here for the position of the view when the user stops touching the screen
// Set "CGFloat finalX" and "CGFloat finalY", depending on the last position of the touch
// Use this to animate the position of your view to where you want
[UIView animateWithDuration: aDuration
delay: 0
options: UIViewAnimationOptionCurveEaseOut
animations:^{
CGPoint finalPoint = CGPointMake(finalX, finalY);
recognizer.view.center = finalPoint; }
completion:nil];
}
[recognizer setTranslation:CGPointMake(0, 0) inView:_myScroll];
}
Я не дам вам идеального ответа здесь, вам придется работать над кодом, чтобы найти способ заставить его работать так, как вы этого хотите.
Вот последний совет. Вы можете сделать какую-то "плавную" анимацию, используя slideFactor. Это поможет вашей анимации быть более "реалистичной". Работайте над этим кодом, который вы добавляете прямо в начале "if":
CGPoint velocity = [recognizer velocityInView:self.view];
CGFloat magnitude = sqrtf((velocity.x * velocity.x) + (velocity.y * velocity.y));
CGFloat slideMult = magnitude / 200;
float slideFactor = 0.1 * slideMult; // Increase for more slide
Затем в UIView animateWithDuration:
используйте slideFactor
как продолжительность.