2014-07-21 5 views
2

안녕하세요 UILongPressGestureRecognizer의 상태를 UIGestureRecognizerStateEnded으로 강제 변경하여 UILongPressGestureRecognizer (기본적으로 일종의 터치를 생성하고 시간을 길게 설정하는 방법)을 찾고 있습니다. up 기능). 여기 프로그래밍 방식으로 UILongPressGestureRecognizer의 상태를 변경하십시오

이 아래에서 내 시도 :

- (void)handleLongPressGestures:(UILongPressGestureRecognizer *)sender 
{ 
     if (sender.state == UIGestureRecognizerStateBegan) 
     { 
      NSLog(@"Hold Gesture Started"); 
      timer = [NSTimer scheduledTimerWithTimeInterval:10.0 target:self selector:@selector(timesup:) userInfo:nil repeats:NO]; 
      //perform a function - i.e. start something 
     } 
     else if(sender.state == UIGestureRecognizerStateEnded) 
     { 
      NSLog(@"Hold Gesture Complete"); 
      [timer invalidate]; 
      timer = nil; 
      //perform a function - i.e. stop something    
     } 
} 
-(void)timesup:(NSTimer *)timer { 
    NSLog(@"Timer Up!"); 
    [longpress setState:UIGestureRecognizerStateEnded]; 
} 

문제는 엑스 코드에서 권장하지만,이 오류를 던지는 유지 [longpress setState:UIGestureRecognizerStateEnded];이다 :

No visible @interface for 'UILongPressGestureRecognizer' declares the selector 'setState:'

이 문제를 해결하는 방법에 대한 아이디어 /이 문제를 피하시겠습니까? 나는 SO에 대한 해결책을 찾고자했지만 아무 것도 찾지 못했습니다. 즉, 이미 답변 한 질문과 중복 된 내용이 있으면 사과드립니다. (약속드립니다!)

감사합니다.

답변

4

기본적으로 UIKit을 구현 파일로 가져올 때 상태 속성을 읽기 전용으로 공개적으로 선언하는 UIGestureRecognizer.h를 가져 오기 때문에이 오류가 발생합니다. 이 속성을 설정하려면 UIGestureRecognizerSubclass.h를 가져와야합니다.이 속성은 readwrite로이 속성을 다시 선언합니다. UIGestureRecognizer의 하위 클래스 내에서 사용하기위한 것이며,이 사용법이 안전한지 말할 수있는 방법에 대해 충분히 알지 못합니다.

#import <UIKit/UIGestureRecognizerSubclass.h> 
+1

:

은 그럼 당신은 같은 상태를 설정할 수있어! 이상한 일들을 아직 눈치 채지 못했지만 - 어떤 일이 생기면 여기에 올리겠습니다! –

0

믹 맥 컬럼의 대답은 물론 스위프트 3 완벽하게 작동합니다.

Project-Bridging-Header.h 파일에 #import <UIKit/UIGestureRecognizerSubclass.h>이 필요합니다. 완벽하게 작동

var longPressRecognizer: UILongPressGestureRecognizer! 
self.longPressRecognizer.state = .ended 
관련 문제