2014-08-30 79 views
0

我试图在uiscrollview中添加uiview的移动手势,但是我无法禁用uiscrollview的srcoll事件。我在Main类中实现了带有分页启用的UIScrollview。在另一个类中,我添加了uiview,为它添加手势,但我不知道如何禁用uiscrollview的滚动。如何在uiscrollview中向uiview添加拖动手势ios

请给我一些建议。提前致谢。

回答

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]; 
} 

希望这个答案可以帮助你。