繁体   English   中英

如何在uiscrollview iOS中向uiview添加拖动手势

[英]How to add drag gesture to uiview in uiscrollview ios

我正在尝试在uiscrollview内添加uiview的移动手势,但无法禁用uiscrollview的srcoll事件。 我已经在Main类中实现了具有分页启用功能的UIScrollview。 在另一个类中,我在其中添加了uiview,为其添加了手势,但是我不知道如何禁用uiscrollview的滚动。

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

您需要从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];
}

希望这个答案对您有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM