UIScrollview получает события касания

Как я могу обнаружить точки касания в моем UIScrollView? Прикосновения методов делегирования не работают.

Ответ 1

Настройте распознаватель жестов:

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapGestureCaptured:)];
[scrollView addGestureRecognizer:singleTap];    

и вы получите следующие штрихи:

- (void)singleTapGestureCaptured:(UITapGestureRecognizer *)gesture
{ 
    CGPoint touchPoint=[gesture locationInView:scrollView];
}

Ответ 2

Вы можете создать свой собственный подкласс UIScrollview, а затем вы можете реализовать следующее:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 

{

NSLog(@"DEBUG: Touches began" );

UITouch *touch = [[event allTouches] anyObject];

    [super touchesBegan:touches withEvent:event];
}

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {

    NSLog(@"DEBUG: Touches cancelled");

    // Will be called if something happens - like the phone rings

    UITouch *touch = [[event allTouches] anyObject];

    [super touchesCancelled:touches withEvent:event];

}


- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {

    NSLog(@"DEBUG: Touches moved" );

    UITouch *touch = [[event allTouches] anyObject];

    [super touchesMoved:touches withEvent:event];

}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    NSLog(@"DEBUG: Touches ending" );
    //Get all the touches.
    NSSet *allTouches = [event allTouches];

    //Number of touches on the screen
    switch ([allTouches count])
    {
        case 1:
        {
            //Get the first touch.
            UITouch *touch = [[allTouches allObjects] objectAtIndex:0];

            switch([touch tapCount])
            {
                case 1://Single tap

                    break;
                case 2://Double tap.

                    break;
            }
        }
            break;
    }
    [super touchesEnded:touches withEvent:event];
}

Ответ 3

Если мы говорим о точках внутри scrollview, вы можете подключиться к методу делегата:

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

и внутри метода, прочитайте свойство:

@property(nonatomic) CGPoint contentOffset

из scrollView, чтобы получить координацию.

Ответ 4

Это работает и при касании.

В текущем правильном помеченном ответе вы можете получить touch point только при событии "Касание". Похоже, что это событие происходит только "пальцем вверх", а не внизом.

Из комментария yuf в том же ответе вы можете получить touch point из базового представления также внутри UIScrollView.

- (BOOL)gestureRecognizer:(UIGestureRecognizer*)gestureRecognizer shouldReceiveTouch:(UITouch*)touch
{
  CGPoint touchPoint = [touch locationInView:self.view];

  return TRUE; // since we're only interested in the touchPoint
}

Согласно документации Apple documentation gestureRecognizer делает:

Спросите делегата, должен ли распознаватель жестов получать объект, представляющий прикосновение.

для меня это означает, что я могу решить, должен ли gestureRecognizer получать прикосновение или нет.