2012-08-15 54 views
2

我有兩個視圖控制器同時使用視圖控制器遏制出現在屏幕上,實現與蘋果的代碼示例相同。調用它們視圖控制器A(vcA)和視圖控制器B(vcB)以及容器視圖控制器(containerVC)。如何跟蹤兩個UIViewcontrollers之間的UITouches? (使用遏制)

每個vcA和vcB都有一個對象網格,我希望能夠將對象從vcA拖到vcB。更具體地說,我想要在vcB中觸發一次觸發vcB中的touchesMoved:withEvent方法,一旦它位於邊界vcB內。

我已經覆蓋了touchesMoved:在containerVC withEvent方法,跟蹤通過點擊測試觸摸,並試圖轉發觸摸 UIView的層次結構如下所示:

// in the containerVC 
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    CGPoint locationPoint = [[touches anyObject] locationInView:self.view]; 
    UIView* touchIsInViewControllerA = [vcA hitTest:locationPoint withEvent:event]; 
    if (touchIsInViewControllerA) { 
     NSLog(@"Touch is in vcA"); 
     return; 
    } 
    UIView* touchIsInViewControllerB = [vcB hitTest:locationPoint withEvent:event]; 
    if (touchIsInViewControllerB) { 
     NSLog(@"Touch is in vcB"); 
     [vcB touchesMoved:touches withEvent:event]; // this causes a crash 
    } 
} 

這似乎是遞歸,containerVC將觸摸事件按下層次結構,然後vcB將觸摸事件傳遞迴層次結構。

我的問題:有沒有辦法讓vcB將touch事件傳回給containerVC的響應器鏈?或者我應該以一種不同的方式實現 - 使vcB成爲vcA的代表,並讓containerVC脫離等式?

注:我猜共同應對將放棄VC容納圖案,並保持它在同一個視圖控制器,但是在這個例子中未顯示的原因,我覺得讓他們分開工作會更好我 - 除非它是完全瘋狂和超級哈克這樣做...

回答

0

通過爲每個視圖控制器設置單獨的手勢對象可以輕鬆解決此問題。

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 

if (touchIsInViewControllerA) { 

// calls a delegate of view controller A 

    } 
else 
{ 

// calls a delegate of view controller B 
} 
} 
相關問題