通过UIView将触摸传递给UIScrollView无法正常工作

时间:2009-03-27 13:03:10

标签: iphone cocoa-touch

我有一个从UIScrollView控制器派生的视图,我用它来浏览库中的图像。这很好。

我在右侧覆盖了一个UIView来处理在图像列表中快速滚动的触摸。我的问题是,如果我将触摸传递给'super'或'nextResponder',它们永远不会进入下面的UIScrollView对象。

我的问题是如何强制下面的UIScrollView来处理我不需要处理的触摸?我正在设置一个0.3秒的计时器,在此期间所有触摸都传递给UIScrollView进行处理。因此,如果用户启动滑动手势来翻页,则会发生。

这是touchesBegan方法的代码:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesBegan:touches withEvent:event];

// Start a timer to trigger the display of the slider and the processing of events.
touchesTimer = [NSTimer scheduledTimerWithTimeInterval:0.3 target:self selector:@selector(showSlider:) userInfo:nil repeats:NO];

// Where are we at right now?
UITouch *touch = [touches anyObject];
CGPoint currentPoint = [touch locationInView:self.view];
lastPage = [self page:currentPoint.y];

// Pass the event though until we need it.
//  [self.nextResponder touchesBegan:touches withEvent:event];
if ([touch.view isKindOfClass:[UIScrollView class]]) 
{
    if (self.nextResponder != nil &&
        [self.nextResponder respondsToSelector:@selector(touchesEnded:withEvent:)]) 
    {
        [self.nextResponder touchesEnded:touches withEvent:event];
    }
}
}

2 个答案:

答案 0 :(得分:1)

我会尝试使用常规的UIViewController而不是UIScrollViewController,然后在需要的地方添加滚动视图对象,并在右侧放置您想要的滚动视图。通过这种方式,它们是分开的,触摸不会混淆。

答案 1 :(得分:0)

这是一个更适合我的简单解决方案:

在UIScrollview顶部的UIView中,宽度和高度都为0(这样,视图在技术上不再位于UIScrollView之上)并设置clipsToBounds = NO(这样视图的内容仍会显示在UIScrollView的顶部)。

 self.OverlayView.clipsToBounds = NO;
 CGRect frame = self.OverlayView.frame;
 self.OverlayView.frame = CGRectMake(frame.origin.x, frame.origin.y, 0, 0);

请注意,如果UIView包含交互式控件,则它们将不再起作用。您需要将其移动到UIScrollView上方的自己的视图中。