UIImageView의 터치 이벤트를 감지하려면 어떻게 해야 합니까?
네비게이션 바에 이미지(UIImageView)를 배치하였습니다.이제 터치 이벤트를 감지하고 이벤트를 처리하고 싶습니다.내가 어떻게 그럴 수 있을까?
현실적으로 말하면, 그렇게 하지 마세요.
대신 UIImageView 위에 사용자 지정 스타일이 있는 버튼(이미지를 지정하지 않는 한 버튼 그래픽 없음)을 추가합니다.그런 다음 호출할 메소드를 연결합니다.
이 기술을 사용하면 터치 장치를 조작하는 대신 화면의 일부 영역을 단추로 사용할 수 있습니다.
A UIImageView
는 서파생니다에서 된 것입니다.UIView
은 파서생된에서 입니다.UIResponder
터치 이벤트를 처리할 준비가 되어 있습니다.당신은 그것을 제공하고 싶을 것입니다.touchesBegan
,touchesMoved
,그리고.touchesEnded
사용자가 이미지를 탭하면 메서드가 호출됩니다.탭 이벤트만 원하는 경우 이미지가 버튼 이미지로 설정된 사용자 지정 버튼을 사용하는 것이 더 쉽습니다.하지만 탭, 움직임 등을 보다 세밀하게 제어하려면 이렇게 해야 합니다.
또한 다음과 같은 몇 가지 사항을 더 살펴볼 수 있습니다.
재정의
canBecomeFirstResponder
이벤트의 될 수 ).을 합니다.
userInteractionEnabled
YES의 재산.은 " " 입니다.UIViews
예의 경우에는 지만입니다.UIImageViews
NO이므로 명시적으로 켜야 합니다.멀티 터치 이벤트(예: 핀치, 확대/축소 등)에 응답하려면 설정해야 합니다.
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 버전 버전.
이미 다음 작업을 수행했습니다.
- UI 이미지 보기 및 상위 보기 모두에 대해 setUserInteractionEnabled를 YES로 설정합니다.
- 집합 다중[사용 가능]을 눌러 다음에 대해 [예]를 선택합니다.
UIImageView
. - 하위 분류 시도
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
'programing' 카테고리의 다른 글
MySQL에서 병합 사용 방법 (0) | 2023.07.27 |
---|---|
Node.js - Winston 라이브러리를 사용하여 로그에 타임스탬프를 추가하는 방법은 무엇입니까? (0) | 2023.07.27 |
'0+ptr'(0 + 포인터)은 무엇을 의미합니까? (0) | 2023.07.27 |
스프링 데이터 받침대 및 Cors (0) | 2023.07.27 |
div 요소에서 키 누름(또는 키다운) 이벤트를 캡처하려면 어떻게 해야 합니까? (0) | 2023.07.27 |