며칠 전 iPad를 5.0으로 업그레이드하고 Xcode를 4.2로 업그레이드하여 동시에 내 앱을 테스트 할 수있었습니다. 이제 이전 버전의 Xcode에서 작동했던 여러 앱에서 터치 코드에 문제가 있습니다.UIView 터치 처리 동작이 Xcode 4.2에서 변경 되었습니까?
-(void)TouchesBegan
및 -(void)TouchesMoved
을 재정 의하여 일부 끌기 기능을 추가하려면 UIImageView를 서브 클래스로 만들었습니다. 은이 아니며 하위 클래스에서는 -(void)TouchesEnded
이지만 이미지보기가 포함 된보기의보기 컨트롤러에서 처리했습니다.
UIImageView
을 뽑아, 그리고 사실에 문제를 좁혀 그
부모 UIView
뷰 컨트롤러에 전달 터치 이벤트 될 것 같지 않습니다 (엑스 코드에 의해 생성 된 템플릿) (또한 Xcode에서 생성).
내 서브 클래스에이를 추가하는 경우 :
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"touches ended event in ImageToDrag");
[self.nextResponder touchesEnded:touches withEvent:event];
}
을이 내 부모 뷰의 뷰 컨트롤러 :
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"touches ended event in ViewController");
}
나는 내가 화면을 드래그하고있는 이미지 가자, I "touches ended event in ImageToDrag"
을 얻되 뷰 컨트롤러의 로그는 가져 오지 마십시오. 내가 의도적으로 서브 클래 싱 된 뷰에서이 작업을 수행하여보기를 건너 뛸 경우
그러나 :
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"touches ended event in ImageToDrag");
[[self.nextResponder nextResponder] touchesEnded:touches withEvent:event];
}
는 둘 다 로그 항목을 얻을.
내가 설명 할 수있는 유일한 이유는 UIView
이 touchesEnded
이벤트를 소비하고이를보기 컨트롤러에 전달하지 않는다는 것입니다.
exclusiveTouch
이
NO
로 설정되어 있는지 확인한
및 userInteractionEnabled
는 부모 뷰에 YES
로 설정하고이 UIImageView
를 서브 클래스입니다.
또한 iOS 5.0 및 iOS 4.2 용 컴파일을 테스트하고 iOS 5 iPad 및 iOS 4.3.1 iPad에 테스트 응용 프로그램을 배포했습니다.
터치 이벤트를 viewController
으로 가져올 수있는 유일한 방법은 뷰를 건너 뛰고 서브 클래스에서 double nextResponder
을 사용하는 것입니다. 그 방법이 기능을하지만, 그것은 나에게 해킹처럼 보이고 나중에 나에게 물지 않기 위해 다시 올 것이라고 확신한다.
이 동작을 본 사람이 있습니까? UIView
이 (가) 터치 이벤트로 무엇을하는지 찾을 수있는 방법이 있습니까?
덕분에, 댄
이것은 트릭을 만들었습니다. 핵심은 내가 이벤트를 처리 한 후 슈퍼 뷰로 이벤트를 전달해야한다는 것이 었습니다. 한 가지 다른 참고 사항은 작동 시키려면 "self.nextResponder"대신 "super"를 사용해야한다는 것입니다. – dlenhard
이 답변을 해주셔서 감사합니다. 이것에 내 머리카락을 찢어 버리고 있었다. –