2014-05-18 13 views
0

myView이라는 UIView가 있습니다. 나는 UIGestureRecognizer를 swipeLeft (아래 코드)이라고 부르며, 사용자가 왼쪽으로 쓸어 넘는 것을 감지합니다.제스처 인식기를 하나의 특정 UIView로 제한 하시겠습니까?

문제는 다음과 같습니다. myViewController은 전체 화면에서 동일한 제스처를 인식하고 다른 작업을 수행합니다. 그래서 내 swipeLeftmyViewController의 해당 특정 영역에서 myView 때 수행 할 내 응용 프로그램을 싶습니다.

UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self 
                  action:@selector(myMethod:)]; 
swipeLeft.direction = UISwipeGestureRecognizerDirectionLeft; 
swipeLeft.delaysTouchesBegan = YES; 
[self.myView addGestureRecognizer:swipeLeft]; 

자세한 내용 : 나는 RESideMenumyViewController를 사용하고 오른쪽 메뉴, 그래서 그것을 볼 때, myViewController의 전경은 모든 방향으로 스 와이프를 인식합니다. 이 UIView myView에서 인식자를 변경하고 싶습니다.

감사합니다.

+0

http://stackoverflow.com/questions/17489780/exclude-subview-from-uitapgesturerecognizer? – Larme

답변

2

먼저보기 컨트롤러 헤더 파일에 스 와이프 제스처를 추가해야합니다. 당신이 DEMORootViewController.m를 보면

@property (strong, nonatomic) UISwipeGestureRecognizer *swipeLeft; 

,이 전화가 표시됩니다

self.rightMenuViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"rightMenuViewController"]; 

이 당신로 awakeFromNib를 호출하고, 뭔가를 할 수있는 첫 번째 기회입니다. 여기에서 당신은 그 슬쩍 제스처를 만들 것입니다. 이 시점에서 콘센트가 설정되지 않았으므로보기에 추가 할 수 없습니다. 처음 설정되면 viewDidLoad에 위치하므로보기에 제스처를 추가합니다. 그래서

- (void)awakeFromNib 
{ 
    self.swipeLeft = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(myMethod:)]; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [self.swipeView addGestureRecognizer:self.swipeLeft]; 
} 

- (void)myMethod:(UISwipeGestureRecognizer *)swipe 
{ 
    NSLog(@"Did swipe") ; 
} 

마지막으로 당신이 우리의 swipeLeft 제스처가 발생할 때마다 실패 RESideMenu.m에 팬 제스처를 얘기해야합니다 뷰 컨트롤러 구현 파일이 추가. 이를 수행하는 방법은 220 행의 RESideMenu.m에 다음 코드를 추가하는 것입니다. 이는 viewDidLoad 메서드의 끝에 있습니다.

if ([self.rightMenuViewController isKindOfClass:[DEMOVC class]]) { 
      DEMOVC *rightVC = (DEMOVC *)self.rightMenuViewController; 
      if (rightVC.swipeLeft) { 
       [panGestureRecognizer requireGestureRecognizerToFail:rightVC.swipeGesture]; 
      } } } 

이것은 사용자 지정 VC가 DEMOVC라고 가정합니다.

#import "DEMOVC.h" 

이 당신을 위해 밖으로 일 있으면 알려 주시기 바랍니다, 그리고 다른 뭔가가 있다면 내가 당신을 도울 수 있습니다 : 당신은 또한이 같은 RESideMenu.m하는 사용자 정의 VC를 가져와야합니다.

+0

감사드립니다. 이 단계별로 노력하고 있지만 문제가 있습니다. 나는 스토리 보드를 사용하지 않고 있습니다. 이 swipeLeft 제스처를 내 루트보기가 아닌 'rightMenu'에있는 UIView에 구현하려고합니다. 그래서 당신이 할 첫 번째 일을 말했듯이 'rightSideMenuViewController.h'에 스 와이프 제스처를 추가했습니다. 다음 줄에 대해서는 스토리 보드를 사용하지 않기 때문에 나는 보지 않습니다. 그렇다면'awakeFromNib' 블럭을 어디에 붙여 넣을까요? 내'rightSideMenuViewController.h' 또는 'rootViewController'라고하는 첫 번째 VC에서? – user3127576

+0

어리석은 질문 인 경우 사과드립니다.하지만 '보기 컨트롤러 구현 파일에 추가'라고 말씀 하셨듯이 너무 확신하지 못했습니다. :) 감사! – user3127576

+0

'rightSideMenuViewController.h'에 추가하고'RESideMenu.h'에 마지막으로'if' 문을 붙여 넣었습니다.하지만 이제는 '선언되지 않은 식별자 panGestureRecognizer 사용'을 말하고 있습니다. – user3127576

관련 문제