2013-07-18 38 views
1

我將UIGestureRecognizer添加到我的某個視圖控制器view將UIGestureRecognizer從一個視圖控制器轉發到另一個視圖控制器

我希望的行爲是當識別此手勢解除手勢視圖控制器並將其轉發給另一個視圖控制器時。 (我想轉發的視圖控制器已向視圖控制器提供了該手勢)

現在,當我關閉視圖控制器時,捏手勢識別器(在邏輯上)失敗。

有什麼建議嗎?謝謝。

+0

能否請您詳細闡述您的要求詳細 – iDhaval

回答

1

\編輯︰現在委託獲取與gestureRecognizer參數。

您可以只實現類似協議:

@protocol ViewControllerWithGestureRecognizerDelegate 

- (void)viewControllerGestureRecognizerEvent:(UIPinchGestureRecognizer *)gestureRecognizer; 

@end 

和委託屬性添加到其中有將提交手勢識別視圖控制器。

@property (nonatomic, weak) id<ViewControllerWithGestureRecognizerDelegate> delegate; 

然後將手勢識別添加到視圖控制器:

UIPinchGestureRecognizer *gestureRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(gestureRecognizerAction:)]; 
[self addGestureRecognizer:gestureRecognizer]; 

呼叫在手勢識別器的操作方法的委託方法:

- (void)gestureRecognizerAction:(UIPichGestureRecognizer *)gestureRecognizer 
{ 
    [self.delegate viewControllerGestureRecognizerEvent:gestureRecognizer]; 
} 

在第二實現協議ViewControllerWithGestureRecognizerDelegate視圖控制器(您想在其中獲得有關手勢識別器事件的通知),並設置視圖控制器的代表哪個手勢識別器t o是第二個視圖控制器。

ViewControllerWithGestureRecognizer.delegate = ViewControllerInWhichYouWantToGetNotifiedAboutGestureRecognizerEvents. 

這種方式每次手勢識別器都會調用一個視圖控制器上的方法,第二個將會被通知。

+0

謝謝,但我的手勢是連續的(UIPinchGestureRecognizer),所以我要轉發的整體姿態,而不是簡單地調用一個方法。 – Devfly

+0

我編輯了我的答案,以便第二個控制器可以訪問您的gestureRecognizer。 –

+0

爲什麼不簡單地將gestureRecognizer的委託屬性設置爲另一個視圖控制器,並使其他VC符合UIGestureRecognizerDelegate協議?例如gestureRecognizer.delegate = otherVC; –

0

您需要包括delaysTouchesEnded直到手勢被識別:

@property (nonatomic) BOOL delaysTouchesEnded 
0

將執行此委託方法不是解決問題了嗎?

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer 
shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer*)otherGestureRecognizer { 
    return YES; 
} 
相關問題