탐색 모음에 이미지 (UIImageView)를 배치했습니다. 이제 터치 이벤트를 감지하고 이벤트를 처리하고 싶습니다. 어떻게 할 수 있는지 알려 주시겠습니까?
감사.
답변
실제로는 그렇게하지 마십시오.
대신 UIImageView 위에 사용자 정의 스타일 (이미지를 지정하지 않는 한 단추 그래픽 없음)이있는 단추를 추가하십시오. 그런 다음 호출하려는 메서드를 첨부합니다.
화면의 일부 영역이 터치 항목을 엉망으로 만드는 대신 버튼 역할을하려는 많은 경우에이 기술을 사용할 수 있습니다.
답변
A UIImageView
는에서 파생 된 a에서 UIView
파생 UIResponder
되므로 터치 이벤트를 처리 할 준비가되었습니다. 당신은 제공 할 것입니다 touchesBegan
, touchesMoved
및 touchesEnded
방법을 사용자가 이미지를 도청 한 경우에는 전화를받을 수 있습니다. 탭 이벤트 만 원하는 경우 이미지가 버튼 이미지로 설정된 사용자 지정 버튼을 사용하는 것이 더 쉽습니다. 그러나 탭, 동작 등을보다 세밀하게 제어하려면 이것이 바로 방법입니다.
또한 몇 가지 더 살펴볼 수 있습니다.
-
canBecomeFirstResponder
뷰가 터치 이벤트의 초점이 될 수 있음을 나타내려면 YES를 재정의 하고 반환합니다 (기본값은 NO). -
userInteractionEnabled
속성을 YES로 설정합니다 . 의 기본값UIViews
은 YES이지만 forUIImageViews
는 NO이므로 명시 적으로 켜야합니다. -
멀티 터치 이벤트 (예 : 핀치, 확대 / 축소 등)에 응답
multipleTouchEnabled
하려면 YES 로 설정 해야합니다.
답변
UIImageView에 터치 이벤트를 추가하려면 .m에서 다음을 사용하십시오.
UITapGestureRecognizer *newTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(myTapMethod)];
[myImageView setUserInteractionEnabled:YES];
[myImageView addGestureRecognizer:newTap];
-(void)myTapMethod{
// treat image tap
}
도움이 되길 바랍니다.
답변
UIGestureRecognizer를 추가 할 수도 있습니다. 뷰 계층 구조에 추가 요소를 추가 할 필요는 없지만 매우 간단한 인터페이스로 터치 이벤트를 처리하기위한 멋지게 작성된 모든 코드를 제공합니다.
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];
답변
나는 지난 몇 시간 동안 내 문제에 대한 해결책을 찾으려고 다른 스레드에 있었고 아무 소용이 없었습니다. 많은 개발자들이이 문제를 공유하고 있음을 알고 있으며 여기 사람들이 이에 대해 알고 있다고 생각합니다. 내부에 여러 이미지가 있으며 UIScrollView
탭 이벤트를 얻으려고합니다.
에서 이벤트를 UIImangeView
얻지 못하지만 UILable
설정하는 매우 유사한 매개 변수 를 사용하여 비슷한 이벤트를 얻 습니다. IOS 5.1에서.
이미 다음을 수행했습니다.
- `UIImageView 및 상위 뷰 모두에 대해 setUserInteractionEnabled를 YES로 설정하십시오.
- 에 대해 setMultipleTouchEnabled를 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를 만든 다음 navbar에 배치하는 대신 UIImageView에서 만드는 UIBarButtonItem을 만들어야합니다.
먼저 이미지보기를 만듭니다.
UIImageView *yourImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"nameOfYourImage.png"]];
그런 다음 이미지보기에서 barbutton 항목을 만듭니다.
UIBarButtonItem *yourBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:yourImageView];
그런 다음 탐색 모음에 막대 단추 항목을 추가합니다.
self.navigationItem.rightBarButtonItem = yourBarButtonItem;
이 코드는 내비게이션 컨트롤러 viewcontroller 배열 내부에있는 뷰 컨트롤러로 들어갑니다. 따라서 기본적으로이 “터치 가능한 이미지 모양의 바 버튼 항목”은이 뷰 컨트롤러가 표시 될 때 내비게이션 바에 만 나타납니다. 다른 뷰 컨트롤러를 누르면이 네비게이션 바 버튼 항목이 사라집니다 ~
답변
원하는 것은 하위 뷰 를 포함 touchesBegan:withEvent:
하는 UIView
(또는 하위 클래스) 의 메서드를 재정의하는 것입니다 UIImageView
.
이 메서드 내에서 UITouch
터치가 UIImageView
인스턴스 의 경계 내에 있는지 테스트 합니다 (라고 가정 해 보겠습니다 imageView
).
즉, 수행 CGPoint
요소 [touch locationInView]
와 교차을 CGRect
요소 [imageView bounds]
? CGRectContainsPoint
이 테스트를 실행 하려면 함수 를 살펴보십시오 .