2014-10-28 3 views
0

간단한 데모 응용 프로그램을 사용하여 UITextView를 UIView 바로 뒤에 (배경으로) 직접 추가하려고합니다.UIPanGestureRecognizer가 UIView 대상을 받아들이지 않습니다.

가 - [UIView의 detectPan이 :] :하지만 컴파일하고 팬 동작을 테스트 할 때마다, 나는이 오류 얻을 인식 할 수없는 선택기 인스턴스에 전송을 여기

0x17e7fc30 내가 만들 어디에 내 샘플 코드되고있는 UIView의과 일부 인트가 있습니까

-(void)detectPan:(UIPanGestureRecognizer *)gr { 
    NSLog(@"inside detectPan"); 
} 

:

CGRect textFieldFrame = CGRectMake(0, 44, 320, 44); 

// Create a TextField 
UITextField *textField = [[UITextField alloc] initWithFrame:textFieldFrame]; 
textField.userInteractionEnabled = NO; 
textField.layer.zPosition = 100001; 
[self.view addSubview:textField]; 

// Create the Text Background View 
UIView *textBG = [[UIView alloc] initWithFrame:textFieldFrame]; 
textBG.layer.zPosition = 100000; 
[self.view addSubview:textBG]; 

self.panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:textBG action:@selector(detectPan:)]; 

그리고 내 detectPan 방법 다음 UIPanGesture를 할당 p 구현에 누락 되었습니까? 나는이 똑같은 접근 방식이 과거에는 나를 위해 일했다고 맹세하지만 지금은 전혀 작동하지 않는다. 매우 혼란스러워! 이 initWithTarget:selfinitWithTarget:textBG를 변경 시도하고 사물이 작동해야 -initWithTarget:action:

에서 단어 "대상"으로 오해하기 쉬운 때문에

+0

컨트롤에 제스처를 추가 했습니까? – channi

+0

[self.view addGestureRecognizer : self.panRecognizer]; –

답변

1

이것은 매우 일반적인 문제입니다.

그래서 코드의 새로운 라인은 다음과 같이 표시됩니다

self.panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(detectPan:)]; 
그들은 "대상"으로 생각하기 때문에 사람들이 단어 "대상"을 넘어받을 이유는은 "개체로입니다

내가 원하는 내 사용자 지정 코드 "(즉"화면에서 드래그하려는 UIView ") 대신 UIPanGestureRecognizer의 대상을"화면에서 드래그하려는 객체가 포함 된 UIView로 생각해야합니다 "또는 다른 말로하면"팬 제스처 번역을 계산하기 위해 사용하려는 좌표 공간을 소유하는 UIView "

좋아요 이 : 당신이 팬 제스처가 textBG 객체 검출되면 essentiualy "말하고 행동으로 목표로 textBG을 설정하고 detectPan 때문에

 
----------------------- 
|      | 
| Containing UIView -|-----> "THE TARGET" 
|      |  The "target" owns the x,y coordinate space where the 
| ------------  |  UIPanGestureRecognizer will calculate the movements of 
| |   |  |  your "drag" or "pan" across the screen. 
| | UIView |  | 
| | (textBG) |  | 
| |   |  | 
| ------------  | 
|      | 
----------------------- 

따라서, 귀하의 예제에서 앱이 충돌한다 , textBG 객체의 detectPan 메서드를 호출 "하지만 textBG 객체에 detectPan 메서드가 없으면 textBG의 부모 내에있는 detectPan 메서드 만 사용할 수 있습니다 (즉, "본인"). 따라서 프로그램에서 textBG 개체와 관련된 -detectPan : 메서드를 찾을 수 없기 때문에 인식기가없는 선택기가 인스턴스 오류로 전송되는 것입니다.

희망이 도움이됩니다.