2013-12-12 109 views
2

我已到處搜索此問題的解決方案,但我的案例似乎有所不同。將觸摸事件轉發到另一個視圖,該視圖被接收事件的視圖部分覆蓋

我有兩個視圖,具體來說,一個GMSMapView(來自Google Maps API的地圖視圖)佔據整個屏幕和另一個視圖在地圖頂部(而不是子視圖,但部分覆蓋它)。會發生什麼情況是,當我用第二個視圖頂部的一個手指和地圖頂部的另一個手指捏合時,地圖不會獲得手勢。由於第二個視圖具有較大的透明區域,我還希望如果用一個手指平移那些地圖將獲得手勢(移動),但保持按鈕(非地圖視圖的子視圖)可點擊。

我試圖保持在非地圖視圖的視圖類文件中的地圖視圖參考,並實施則hitTest方法,但在地圖仍然沒有得到任何接觸......非常感謝

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event 
{ 
    UIView *hitView = [super hitTest:point withEvent:event]; 

    // If the hitView is THIS view, return the map instead 
    if (hitView == self) 
    { 
     return self.targetView; //the map view 
    } 
    // Else return the hitView (as it could be one of this view's buttons): 
    return hitView; 
} 

回答

1

在你的第二個視圖覆蓋pointInside方法,並返回YES,如果該點存在於你的視圖的一些可點擊部分(如按鈕等 - 檢查該點是否在按鈕框內)否則retun NO。
因此,如果用戶點擊第二個視圖,並且您在pointInside中返回NO,那麼mapview的pointInside將被調用,因此它將接收事件。如果你返回YES,mapView的poinInside不會被調用,所以mapView不會接收事件。
希望這會有所幫助。

相關問題