code

UIScrollview가 터치 이벤트를 가져옵니다.

codestyles 2020. 10. 31. 09:43
반응형

UIScrollview가 터치 이벤트를 가져옵니다.


내 터치 포인트를 어떻게 감지 UIScrollView합니까? 터치 대리자 메서드가 작동하지 않습니다.


탭 제스처 인식기 설정 :

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

그리고 당신은 터치를 얻을 것입니다 :

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

고유 한 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];
}

scrollview 내부의 포인트에 대해 이야기하고 있다면 delegate 메소드로 연결할 수 있습니다.

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

메서드 내부에서 속성을 읽습니다.

@property(nonatomic) CGPoint contentOffset

scrollView에서 조정을 얻습니다.


이것은 터치 다운 이벤트에서도 작동합니다.

현재 정답으로 표시된 답변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
}

According to Apple's documentation the gestureRecognizer does:

Ask the delegate if a gesture recognizer should receive an object representing a touch.

which means to me that I can decide if a gestureRecognizer should recieve a touch or not.

참고URL : https://stackoverflow.com/questions/5216413/uiscrollview-getting-touch-events

반응형