2014-08-30 2 views
0

uiscrollview 내부에서 uiview의 이동 제스처를 추가하려고하지만 uiscrollview의 srcoll 이벤트를 비활성화 할 수 없습니다. 메인 클래스에서 페이징 인 에이블 (enable)로 UIScrollview를 구현했다. 다른 클래스에서는 uiview를 추가하고 제스처를 추가했지만 uiscrollview의 스크롤을 해제하는 방법은 알지 못합니다.uiscrollview에서 uiview에 드래그 제스처를 추가하는 방법

제발 나에게 조언을 해줘. 미리 감사드립니다.

답변

1

UIView 클래스에서 제스처를 사용하여 메인 클래스에 위임을 통해 스크롤 뷰를 요청하여 스크롤을 중지하고 나중에 사용하도록 설정해야합니다. 코드를 동봉했습니다.

귀하의 UIView.h 파일

@protocol MyUIViewProtocol <NSObject> 

- (void)setScrollViewScrollEnabled:(BOOL)enabled; 

@end 

@interface MyUIView : UIView 

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

@end 

귀하의 UIView.m 파일 거기에 스크롤 뷰와

@implementation MyUIView 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Initialization code 

     [self setBackgroundColor:[UIColor redColor]]; 
     UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGestureMade:)]; 
     [self addGestureRecognizer:panGesture]; 
    } 
    return self; 
} 

- (void)panGestureMade:(UIPanGestureRecognizer *)recognizer 
{ 
    CGPoint pointsToMove = [recognizer translationInView:self]; 
    [self setCenter:CGPointMake(self.center.x + pointsToMove.x, self.center.y + pointsToMove.y)]; 
    [recognizer setTranslation:CGPointZero inView:self]; 

    //Disable the scroll when gesture begins and enable the scroll when gesture ends. 
    if (self.delegate && [self.delegate respondsToSelector:@selector(setScrollViewScrollEnabled:)]) { 
     if (recognizer.state == UIGestureRecognizerStateBegan) { 
      [self.delegate setScrollViewScrollEnabled:NO]; 
     } 
     else if (recognizer.state == UIGestureRecognizerStateCancelled || recognizer.state == UIGestureRecognizerStateEnded) { 
      [self.delegate setScrollViewScrollEnabled:YES]; 
     } 
    } 
} 

메인 클래스 파일.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 568)]; 
    [self.scrollView setBackgroundColor:[UIColor yellowColor]]; 
    [self.scrollView setPagingEnabled:YES]; 
    [self.scrollView setContentSize:CGSizeMake(320 * 3, 568)]; 
    [self.view addSubview:self.scrollView]; 

    MyUIView *view = [[MyUIView alloc] initWithFrame:CGRectMake(40, 100, 100, 100)]; 
    view.delegate = self; 
    [self.scrollView addSubview:view]; 
} 

- (void)setScrollViewScrollEnabled:(BOOL)enabled 
{ 
    [self.scrollView setScrollEnabled:enabled]; 
} 

이 답변으로 도움이 되었기를 바랍니다.

관련 문제