用两个手指使用 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 的自定义容器的主要内容,如果未能解决你的问题,请参考以下文章