Этот вопрос имеет отношение к этому сообщению, которое я сделал недавно: Перетащите UIView частично, затем он движется сам по себе
Короче говоря, у меня частично перетаскиваемый вид интерфейса.видимый внизу окна.Существует «язычок», который пользователь может использовать для перетаскивания вида вверх или вниз по экрану.Я наложил ограничения на позицию Y для верхних и нижних позиций, используя этот код, но я понятия не имею, если это правильный способ сделать это:
- (void)panPiece:(UIPanGestureRecognizer *)gestureRecognizer
{
UIView *piece = [gestureRecognizer view];
[self adjustAnchorPointForGestureRecognizer:gestureRecognizer];
if ([gestureRecognizer state] == UIGestureRecognizerStateBegan || [gestureRecognizer state] == UIGestureRecognizerStateChanged)
{
CGPoint velocity = [gestureRecognizer velocityInView:[piece superview]];
CGPoint translation = [gestureRecognizer translationInView:[piece superview]];
if(velocity.y < 0) //user is dragging the view upwards the screen
{
// Set the maximum Ypos as the top 1/3rd of the screen
CGFloat maxYPos = self.view.frame.size.height/3;
if(blogTextView.frame.origin.y >= maxYPos)
{
[piece setCenter:CGPointMake([piece center].x, [piece center].y + translation.y)];
[gestureRecognizer setTranslation:CGPointZero inView:[piece superview]];
}
}
else
{
// User is dragging the view downwards the screen
// Set the lowest Y position to be 420
if(blogTextView.frame.origin.y <= 420) //size of remaining view
{
[piece setCenter:CGPointMake([piece center].x, [piece center].y + translation.y)];
[gestureRecognizer setTranslation:CGPointZero inView:[piece superview]];
}
}
}
}
Iдумаю, это выглядит некрасиво, но это работает, если пользователь медленно перетаскивает вид.Проблема в том, что если пользователь очень быстро перетаскивает изображение вверх или вниз по экрану, то его можно вывести за пределы, которые я установил в позиции Y.Например, в состоянии по умолчанию с перетаскиваемым видом внизу, я смог перетащить вид с мгновенной скоростью вплоть до панели навигации!
Есть ли правильный способ установить пределы того, насколько далеко перетаскивается представление, и будет ли оно корректно обрабатываться в этом обратном вызове gestRecognizer?
Для справки, вот фото тестового приложения:
Экран по умолчанию с перетаскиваемым видом внизу и язычком
Вид перетаскивается до правильного максимального положения Y
Спасибо!