Определить местоположение касания в UIScrollView?
Я хотел бы обнаружить (начальную) позицию касания в своем UIScrollView, когда пользователь начнет перетаскивать. Я столкнулся с этой проблемой, и многие, похоже, борются с этой самой проблемой. Теперь, пока я все еще не могу окунуться в голову, почему Apple не позволит пользователям получать доступ к сенсорной информации в виде прокрутки, я не могу не найти решение самостоятельно. Однако все мои попытки потерпели неудачу, поэтому я хотел бы спросить вас.
Вот что я думал:
Я установил UIPanGestureRecognizer, как это в своем подклассе UIScrollView, и добавьте его в свои распознаватели жестов:
UIPanGestureRecognizer *tapDrag = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(touchedAndDragged:)];
tapDrag.cancelsTouchesInView = NO;
tapDrag.delegate = self;
[self addGestureRecognizer:tapDrag];
И соответствующий метод:
-(void)touchedAndDragged:(UIPanGestureRecognizer*)t{
CGPoint loc = [t locationInView:self];
//do something with location (that is exactly what I need)
//...
//Now DISABLE and forward touches to scroll view, so that it scrolls normally
t.enabled = NO;
/****
?????
*****/
}
Как указано в комментариях, я хотел бы отключить жест панорамы после того, как у меня есть точка, а затем отключить распознаватель (в то время как STILL перетаскивание!) и "передать" штрихи в мое представление прокрутки, чтобы пользователь мог прокручивать как обычно. Это вообще возможно? Есть ли другое решение?
Ответы
Ответ 1
Ну UIScrollView уже имеет встроенный жест, который вы можете использовать. Использование будет таким же простым, как установка класса в качестве делегата представления прокрутки (для использования scrollViewWillBeginDragging) и использования UIPanGestureRecognizer -locationInView: для определения местоположения касания.
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
CGPoint location = [scrollView.panGestureRecognizer locationInView:scrollView];
NSLog(@"%@",NSStringFromCGPoint(location));
}
Ответ 2
Почему бы вам не захватить начальное местоположение в -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
, что будет более удобным и эффективным.