2011-05-15 4 views
0

UIScroller 내부에 UIView (myView를 호출 할 수 있음)가 있습니다.iPhone - UIScroller 내부의 UIView ... 부모에게 건 드리면 안되는보기

myView에는 요소를 드래그 할 수 있습니다.

이러한 요소 중 하나를 만졌을 때 스크롤러가 잠겨 모든 것을 스크롤하지 못하게합니다. 요소에는 exclusiveTouch = YES가 있습니다. myView 만 누르면 모든 것을 스크롤해야합니다.

나는 touchesBegan, touchesMoved 등에서이 작업을 수행했지만이 클래스를 제스처로 변환하려고합니다. 새 클래스에는 UIPanGestureRecognizer 및 UITapGestureRecognizer라는 두 개의 제스처가 첨부되어 있습니다. 같은 뭔가 :

이 클래스는 기존의 방법 (등 touchesBegan를) 사용
UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] 
      initWithTarget:self action:@selector(drag:)]; 
[panGesture setMaximumNumberOfTouches:1]; 
[panGesture setDelegate:self]; 
[myView addGestureRecognizer:panGesture]; 
[panGesture release]; 


UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] 
       initWithTarget:self 
       action:@selector(tapAdd:)]; 
[singleTap setDelegate:self]; 
[singleTap setNumberOfTapsRequired:1]; 
[myView addGestureRecognizer:singleTap]; 
[singleTap release]; 

, 단순히

[self.nextResponder touchesBegan: touches withEvent:event]; 

같은 것을 사용하여 감동을 전달하지만 난 것을 어떻게해야합니까 제스처를 사용하고 계십니까? 내 말은, UIPanGestureRecognizer는 내 경우 드래그라는 메서드를 실행할 것이고이 메서드는 제스처를받습니다 ... 어떻게 스크롤러 부모에게 터치를 전달하면 전체가 스크롤되는 것입니까?

감사합니다.

답변

1

보기의 대리인을 만들기 위해 프로토 콜을 설정할 수 있습니다. 헤더에서

는, 당신은 구현 파일에 delegate을 합성해야

@protocol MyViewDelegate 
- (void)drag; 
@end 

@interface ....... { 
    id <MyViewDelegate> delegate; 
} 
@property (nonatomic, assign) id delegate; 
@end 

을 설정합니다. 스크롤러 클래스에서 , 그 구현 파일에서 프로토콜을

@interface Scroller ....... <MyViewDelegate> { 

를 사용하는 것, 그것을 초기화 할 때 myView.delegate = self;을 넣어 - (void)drag {을 추가하고 거기에 원하는 것을 할 수 있는지 확인하십시오. 더 많은 정보가 필요하다면, 물론 프로토콜의 메소드를 - (void)dragWithEvent:(UIEvent *)event 또는 이와 비슷한 것으로 채울 수 있습니다.

그러면 myview에서 drag:을 호출하면 [self.delegate dragWithEvent:event];을 호출하여 프로토콜 방법으로 전달할 수 있습니다.

스크롤러를 스크롤하는 데 약간의 확장이 있음을 알고 있지만, 원하는대로 메시지를 전달합니다.

그것은 당신이 직접

+0

감사 스크롤러 핸들을 touchesBegan 방법 앞으로 다음, 스크롤러보다는 MYVIEW 모든 접촉을 제스처를 추가 할 수있는 가능성도 있습니다. 나는 그것을 시험 할 것이다!! – SpaceDog

관련 문제