2013-01-07 33 views
3

我目前有UIGesture:取消已經開始的iOS

我有一個孩子UIViewController我的主要UIViewController內。在這個孩子UIViewController我有一個UITableView,雖然任何東西都可以在裏面(UIScrollView,UIImageView,組成不同的UIViews子類)。

在我的主要UIViewController我有GestureRecognizerDelegate,所以我收到回調時的姿勢製成,像這樣:

- (void)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer movedWithTouches:(NSSet*)touches andEvent:(UIEvent *)event; 

- (void)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer endWithTouches:(NSSet*)touches andEvent:(UIEvent *)event; 

@optional 

- (void)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer beganWithTouches:(NSSet*)touches andEvent:(UIEvent *)event; 

有關主要UIViewController頂部做了一個特別的姿勢,我顯示一個小UIViewUIImageView。所以基本上當觸摸從頂部到底部時,UIView動畫並顯示圖像,當我從屏幕釋放手指時,UIView返回頂部。這與Apple提供的通知中心非常相似,不同之處在於我不控制它的滾動,它只顯示頂部200px。

問題:

理論上UIViewUIImage是我的層次結構中的頂級EST UIView,但是當我把寫有我的區域手指左右移動,我可以看到UITableView它下面,移動。對我來說,這是沒有意義的,因爲UIViewUIImageView應該捕獲這些手勢。

我想要什麼:

簡單,當我告訴了UIViewUIImage禁用所有對childViewController的相互作用。

我曾嘗試:

目前我有這樣的:

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
{ 
    return YES; 
} 

如果我把爲NO,UIViewUIImage甚至不顯示。

如果我把myChildViewController.view.userInteractionEnabled = NO這樣的東西,因爲手勢已經開始,它將無法工作。當然,如果我在手勢開始之前使用它,那麼一切都將按預期工作。但問題是,我將無法使用UITableView

回答

1

那麼,在什麼工作到底是:

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
{ 
    // Check if I am not on the Default state (UIView with the UIImageView hidden) 
    if(currentState != kDefaultState) 
    { 
     otherGestureRecognizer.enabled = NO; 
     [arrayOfDisabledGestures addObject:otherGestureRecognizer]; 
    } 

    return YES; 
} 

當我最後關閉UIViewUIImageView我做到以下幾點:

[arrayOfDisabledGestures makeObjectsPerformSelector:@selector(setEnabled:) withObject:@YES]; 

重新啓用所有的手勢。我不太喜歡這個解決方案,我認爲應該有(並且我敢打賭)有其他的方法來做這件事。