用两个手指使用 UIScrollView 的自定义容器

Posted

技术标签:

【中文标题】用两个手指使用 UIScrollView 的自定义容器【英文标题】:Custom Container using UIScrollView with two fingers 【发布时间】:2013-05-25 00:32:51 【问题描述】:

我正在创建一个容器视图控制器,其中子视图控制器显示为分页滚动视图。在这个容器控制器中,我想用两根手指在水平滚动的页面之间切换。所以我使用了一个 UIScrollView 并且我已经这样设置了:

self.scrollView.showsHorizontalScrollIndicator = NO;  
self.scrollView.showsVerticalScrollIndicator = NO;  
self.scrollView.delegate = self;

[self.scrollView setContentOffset:[self rectForPage:1].origin];

for (UIGestureRecognizer *gestureRecognizer in self.scrollView.gestureRecognizers) 
    if ([gestureRecognizer  isKindOfClass:[UIPanGestureRecognizer class]]) 
        UIPanGestureRecognizer *panGR = (UIPanGestureRecognizer *) gestureRecognizer;
        panGR.minimumNumberOfTouches = 2;
    

我还实现了- (void)scrollViewDidScroll:(UIScrollView *)sender 方法来避免垂直滚动

 - (void)scrollViewDidScroll:(UIScrollView *)sender 
     CGFloat pageWidth = self.scrollView.frame.size.width;
     int page = floor((self.scrollView.contentOffset.x +pageWidth/2) / pageWidth);
     self.pageControl.currentPage = page;
     [self.scrollView setContentOffset: CGPointMake(self.scrollView.contentOffset.x, 0)];
 

现在的问题是 childViewControllers 子视图无法接收来自用户的触摸。我希望通过单次触摸来抛出视图层次结构。我已经阅读了关于子类化 UIScrollView 以覆盖方法 - (BOOL)touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view 但仅在子视图为 UIControl 时才调用它。我该怎么做?

目的是这个 ChildViewControllers 里面有 UIButtons 和应该与 singleTouches 一起使用的 ScrollViews

【问题讨论】:

【参考方案1】:

也许不完全是,但这可能会对您有所帮助。创建一个滚动视图子类并实现它;

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event 
    // UIView will be "transparent" for touch events if we return NO
    for (id subview in self.subviews) 
        if ([subview isKindOfClass:[YourViewController class]]) 
            YourViewController *VC = (YourViewController*) subview;

            if (CGRectContainsPoint(YourViewController.frame, point)) 
                return YES;
            
        
    
    return NO;

【讨论】:

谢谢你的回答,但它没有。工作......即使我总是返回是,按钮在子视图控制器视图中也没有反应:(

以上是关于用两个手指使用 UIScrollView 的自定义容器的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView 只能用一根手指滚动

消息传递(或不传递)到 UIScrollView

如何通过手指获取 UIScrollView 分页?

支持 UITableView 的自定义 UIScrollView

UIscrollview中的自定义UIButton

如何检测手指移入或移出我的自定义 UIView