2013-06-26 94 views
1

我試圖在我的應用程序中實現容器視圖控制器設計。不過,有人告訴我需要支持iOS 4.3設備,因此iOS 5中引入的官方視圖控制器API目前不是一種選擇。使用MaskToBounds觸摸事件處理NO

爲了達到類似的行爲,我使用了黑客。爲我的RootViewController調整視圖的大小,併爲其添加子視圖,使其位於視圖邊界之外。例如:RootView的界限爲0,0,320,480。現在我把它調整到0,0,320,430,包括一個子視圖0,430,320,60。這是有效的,因爲我使用ApplicationFrame進行了所有計算,爲我提供了穩定的框架以供工作。但我現在面臨的問題是,超出視圖範圍的子視圖不會接收觸摸事件。 maskToBounds = NO屬性可以幫助我顯示。但觸動?任何人都知道如何做到這一點?

回答

1

每當你想子視圖接收在這種情況下,觸摸事件,你可以做到以下幾點:

1-創建從UIView繼承一個新的類並覆蓋hitTest:withEvent:允許子視圖攔截觸摸:

@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> Custom Class的右側面板)。

我們完成了!