UIScrollView 内的 UISwipeGestureRecognizer 不会向右滑动 - Objective C

Posted

技术标签:

【中文标题】UIScrollView 内的 UISwipeGestureRecognizer 不会向右滑动 - Objective C【英文标题】:UISwipeGestureRecognizer inside UIScrollView does not swipe right - Objective C 【发布时间】:2017-10-25 06:08:16 【问题描述】:

我在滚动视图中使用了两个滑动手势,因此我可以更改照片和放大,向左滑动正常且流畅,而向右滑动无法正常工作,多次滑动后它可能会触发一次,我正在使用这段代码:

//image zoom
    self.scrollView.minimumZoomScale=1.0;
    self.scrollView.maximumZoomScale=6.0;
    self.scrollView.contentSize=CGSizeMake(1280, 960);
    self.scrollView.delegate=self;
    self.scrollView.clipsToBounds = YES;
    self.scrollView.scrollEnabled = false;

    UISwipeGestureRecognizer * swipeleft=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeleft:)];
    swipeleft.direction=UISwipeGestureRecognizerDirectionLeft;
    [self.view addGestureRecognizer:swipeleft];

    UISwipeGestureRecognizer * swiperight=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swiperight:)];
    swiperight.direction=UISwipeGestureRecognizerDirectionRight;
    [self.view addGestureRecognizer:swiperight];

以及这两种处理滑动的方法

-(void)swipeleft:(UISwipeGestureRecognizer*)gestureRecognizer

    NSLog(@"LEFTtttttt");
    if(index > 0 && index < _photoCount)
        index = index - 1;
        [self loadImage];
    



-(void)swiperight:(UISwipeGestureRecognizer*)gestureRecognizer

       NSLog(@"RIGHTttttt");
    if(index >= 0 && index < _photoCount - 1)
        index = index + 1;
        [self loadImage];
    

我当然搜索了一个解决方案并尝试了不同的代码但它不起作用,我添加了

[self.scrollView.panGestureRecognizer requireGestureRecognizerToFail:swiperight];

还有这个,

-(void)scrollViewDidZoom:(UIScrollView *)scrollView 
    if (scrollView.zoomScale!=1.0) 
        // Zooming, enable scrolling
        scrollView.scrollEnabled = TRUE;
     else 
        // Not zoomed, disable scrolling so gestures get used instead
        scrollView.scrollEnabled = FALSE;
    

唯一的区别是当我添加后一个代码时,当我放大时向右滑动正常工作,而它应该在相反的情况下工作。

我是否遗漏了代码中的某些内容?

谢谢。

【问题讨论】:

【参考方案1】:

请将滑动手势添加到不在 self.view 上的 scrollView 以使其在用户在 scrollView 上滑动时正常工作。如下所示

UISwipeGestureRecognizer * swipeleft=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeleft:)];
swipeleft.direction=UISwipeGestureRecognizerDirectionLeft;
[self.scrollView addGestureRecognizer:swipeleft];

UISwipeGestureRecognizer * swiperight=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swiperight:)];
swiperight.direction=UISwipeGestureRecognizerDirectionRight;
[self.scrollView addGestureRecognizer:swiperight];

这可能是因为滚动视图在 self.view 上方呈现。

【讨论】:

如果你还有问题分享我会帮你的 忘了添加,我试过这个解决方案,但没有用。 @yasserh 您现在面临的具体问题是什么?请分享, 同样的问题,可以向左滑动但不能向右滑动,除非我放大。 添加这行后能不能试试[swipeRight requireGestureRecognizerToFail:self.scrollView.panGestureRecognizer];

以上是关于UIScrollView 内的 UISwipeGestureRecognizer 不会向右滑动 - Objective C的主要内容,如果未能解决你的问题,请参考以下文章

限制 UIScrollView 内的 UILabel 的高度

UIScrollview 内的 UIView 内的 UILabel 上的 UIGestureRecognizer

UIScrollview内的UIView内的UIButton,ARC问题

Swift - 通过点击 ScrollView 内的 ViewController 内的按钮来滚动 UIScrollView

UIScrollView 内的 CPTXYGraph

UIScrollView 内的 UIVIew 反弹回来