programing

UIImageView의 터치 이벤트를 감지하려면 어떻게 해야 합니까?

powerit 2023. 7. 27. 22:26
반응형

UIImageView의 터치 이벤트를 감지하려면 어떻게 해야 합니까?

네비게이션 바에 이미지(UIImageView)를 배치하였습니다.이제 터치 이벤트를 감지하고 이벤트를 처리하고 싶습니다.내가 어떻게 그럴 수 있을까?

현실적으로 말하면, 그렇게 하지 마세요.

대신 UIImageView 위에 사용자 지정 스타일이 있는 버튼(이미지를 지정하지 않는 한 버튼 그래픽 없음)을 추가합니다.그런 다음 호출할 메소드를 연결합니다.

이 기술을 사용하면 터치 장치를 조작하는 대신 화면의 일부 영역을 단추로 사용할 수 있습니다.

A UIImageView는 서파생니다에서 된 것입니다.UIView은 파서생된에서 입니다.UIResponder터치 이벤트를 처리할 준비가 되어 있습니다.당신은 그것을 제공하고 싶을 것입니다.touchesBegan,touchesMoved,그리고.touchesEnded사용자가 이미지를 탭하면 메서드가 호출됩니다.탭 이벤트만 원하는 경우 이미지가 버튼 이미지로 설정된 사용자 지정 버튼을 사용하는 것이 더 쉽습니다.하지만 탭, 움직임 등을 보다 세밀하게 제어하려면 이렇게 해야 합니다.

또한 다음과 같은 몇 가지 사항을 더 살펴볼 수 있습니다.

  • 재정의canBecomeFirstResponder이벤트의 될 수 ).

  • 을 합니다.userInteractionEnabledYES의 재산.은 " " 입니다.UIViews 예의 경우에는 지만입니다.UIImageViewsNO이므로 명시적으로 켜야 합니다.

  • 멀티 터치 이벤트(예: 핀치, 확대/축소 등)에 응답하려면 설정해야 합니다.multipleTouchEnabled 그렇습니다.

UIImageView에 터치 이벤트를 추가하려면 .m 파일에서 다음을 사용합니다.

UITapGestureRecognizer *newTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(myTapMethod)];

[myImageView setUserInteractionEnabled:YES];

[myImageView addGestureRecognizer:newTap];


-(void)myTapMethod{
    // Treat image tap
}

UIGesture Recognizer를 추가할 수도 있습니다.보기 계층에 추가 요소를 추가할 필요는 없지만 상당히 간단한 인터페이스로 터치 이벤트를 처리하기 위한 코드를 모두 제공합니다.

    UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc]
                                            initWithTarget:self action:@selector(handleSwipe:)];
    swipeRight.direction = UISwipeGestureRecognizerDirectionRight;
    [imgView_ addGestureRecognizer:swipeRight];        
    [swipeRight release];
    UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc]
                                            initWithTarget:self action:@selector(handleSwipe:)];
    swipeLeft.direction = UISwipeGestureRecognizerDirectionLeft;
    [imgView_ addGestureRecognizer:swipeLeft];
    [swipeLeft release];

저는 지난 몇 시간 동안 제 문제에 대한 해결책을 찾으려고 노력했지만 소용이 없었습니다.저는 많은 개발자들이 이 문제를 공유하고 있다는 것을 알고 있고, 저는 여기 있는 사람들이 이것에 대해 알고 있다고 생각합니다.의▁a▁ 안에 여러 개의 가 있습니다.UIScrollView그들에 대한 탭 이벤트를 시도하는 중입니다.

나는 어떤 이벤트도 받지 않습니다.UIImangeView하지만 저는 비슷한 사건을 겪습니다.UILable매우 유사한 매개 변수를 사용하여 설정합니다. 5iOS 5.1 버전 버전.

이미 다음 작업을 수행했습니다.

  1. UI 이미지 보기 및 상위 보기 모두에 대해 setUserInteractionEnabled를 YES로 설정합니다.
  2. 집합 다중[사용 가능]을 눌러 다음에 대해 [예]를 선택합니다.UIImageView.
  3. 하위 분류 시도UIImageView아무 도움도 안 됐어요

아래에 코드를 첨부하면, 이 코드에서 나는 두 가지를 모두 초기화합니다.UIImageView그리고.UILabel라벨은 발화 사건의 측면에서 잘 작동합니다.저는 관련 없는 코드를 피하려고 노력했습니다.

UIImageView *single_view = [[UIImageView alloc]initWithFrame:CGRectMake(200, 200, 100, 100)];
single_view.image = img;
single_view.layer.zPosition = 4;

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapGestureCaptured:)];
[single_view addGestureRecognizer:singleTap];
[single_view setMultipleTouchEnabled:YES];
[single_view setUserInteractionEnabled:YES];
[self.myScrollView addSubview:single_view];
self.myScrollView.userInteractionEnabled = YES;

UILabel *testLabel = [[UILabel alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
testLabel.backgroundColor = [UIColor redColor];
[self.myScrollView addSubview:testLabel];
[testLabel addGestureRecognizer:singleTap];
[testLabel setMultipleTouchEnabled:YES];
[testLabel setUserInteractionEnabled:YES];
testLabel.layer.zPosition = 4;

이벤트를 처리하는 방법:

- (void)singleTapGestureCaptured:(UITapGestureRecognizer *)gesture
{
    UIView *tappedView = [gesture.view hitTest:[gesture locationInView:gesture.view] withEvent:nil];
    NSLog(@"Touch event on view: %@", [tappedView class]);
}

말씀하신 대로 라벨 탭이 수신되었습니다.

터치 가능한 UIImageView를 만든 다음 탐색 모음에 배치하는 대신 UIImageView로 만든 UIIbarButtonItem을 만들어야 합니다.

먼저 이미지 보기를 만듭니다.

UIImageView *yourImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"nameOfYourImage.png"]];

그런 다음 이미지 보기에서 막대 단추 항목을 만듭니다.

UIBarButtonItem *yourBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:yourImageView];

그런 다음 탐색 모음에 막대 단추 항목을 추가합니다.

self.navigationItem.rightBarButtonItem = yourBarButtonItem;

이 코드는 탐색 컨트롤러 뷰 컨트롤러 배열 내부에 있는 뷰 컨트롤러에 들어갑니다.따라서 기본적으로 이 "터치 가능한 이미지 모양의 막대 단추 항목"은 이 보기 컨트롤러가 표시될 때만 탐색 모음에 나타납니다.다른 보기 컨트롤러를 누르면 이 탐색 모음 단추 항목이 사라집니다.

다음을 재정의하는 것이 좋습니다.touchesBegan:withEvent:의 방법UIView를 포함하는 (또는 하위 클래스)UIImageView부감도

이 방법 내에서 다음 중 하나라도 테스트합니다.UITouch터치가 범위 안에 들어갑니다.UIImageView인스턴스(예: 이라고 합니다.imageView).

즉, 다음과 같은 일이 있습니까?CGPoint요소[touch locationInView]와 교차하는.CGRect요소[imageView bounds]기능을 살펴봅니다.CGRectContainsPoint이 테스트를 실행합니다.

먼저 UIButton을 배치한 다음 이 버튼의 배경 이미지를 추가하거나 UIImageView를 버튼 위에 배치해야 합니다.

또는:

UIImageView를 탭할 때 클릭 동작을 얻을 수 있도록 UIImageView에 탭 제스처를 추가할 수 있습니다.

이 답변에 대한 Swift 4 솔루션을 찾고 있는 사용자는 다음을 사용하여 UIImageView에서 터치 이벤트를 감지할 수 있습니다.

let gestureRecognizer: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(imageViewTapped))
imageView.addGestureRecognizer(gestureRecognizer)
imageView.isUserInteractionEnabled = true

그런 다음 선택기를 다음과 같이 정의해야 합니다.

@objc func imageViewTapped() {
    // Image has been tapped
}

해당 보기에 제스처를 추가합니다.해당 보기에 이미지를 추가하면 이미지의 제스처도 감지됩니다.당신은 터치 이벤트의 대리인 방법으로 시도할 수 있습니다.그렇다면 그것도 감지하고 있을지도 모릅니다.

언급URL : https://stackoverflow.com/questions/855095/how-can-i-detect-the-touch-event-of-an-uiimageview

반응형