2013-06-26 2 views
1

내 앱에 컨테이너보기 컨트롤러 디자인을 구현하려고했습니다. 그러나 iOS 4.3 장치를 지원해야한다는 소식을 들었으므로 iOS 5에 도입 된 공식보기 컨트롤러 API는 현재 옵션이 아닙니다.MaskToBounds를 사용한 터치 이벤트 처리 NO

비슷한 동작을 수행하기 위해 해킹을 사용했습니다. 내 RootViewController에 대한 뷰의 크기를 조정하고 뷰의 범위 밖에있는 하위 뷰를 추가했습니다. 예 : RootView의 경계는 0,0,320,480입니다. 이제 0,0,320,430으로 크기를 조정하고 043032060에 하위 뷰를 포함 시켰습니다. 이것은 작동하는 안정된 프레임을 제공하는 ApplicationFrame을 사용하는 모든 계산을 수행하기 때문에 가능합니다. 하지만 지금 직면하고있는 문제는 뷰의 범위를 벗어나는 하위 뷰가 터치 이벤트를받지 못한다는 것입니다. maskToBounds = NO 속성은 디스플레이를 도와줍니다. 하지만 감동? 아무도 어떻게하는지 안다?

답변

1

당신이 그런 경우에 터치 이벤트를 수신 할 수있는 하위 뷰를 할 때마다, 당신은 다음을 수행 할 수 있습니다

1- UIView에서 상속하는 새로운 클래스를 만들고 파단 접촉 차단 할 수 있도록 hitTest:withEvent:를 오버라이드 (override) :

@interface CustomView : UIView 
@end 

@implementation CustomView 

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { 
    /// Check if the point is inside the subview 
    CGPoint newPoint = [subview convertPoint:point fromView:self]; 
    if ([subview pointInside:newPoint withEvent:event]) { 
     /// Let the subview decide the return value 
     return [subview hitTest:newPoint withEvent:event]; 
    } 

    /// Default route 
    return [super hitTest:point withEvent:event]; 
} 

@end 

2 - 루트보기의 클래스를 CustomView (Xcode> Identity Inspector> 사용자 정의 클래스의 오른쪽 패널에서)로 변경하십시오.

이제 끝났습니다!