当反弹设置为NO时,嵌套的UIScrollView不会反弹,也不会检测慢速滑动手势

时间:2011-03-07 20:59:39

标签: ios uiscrollview ipad

很抱歉这个长而自我解释的标题,但UIScrollView提出了很多问题,我发现很难找到可能在不同情况下有用的问题。

我在iPad应用中嵌套了滚动视图。到目前为止一切都那么好,一切都有起伏,但它很光滑,反应灵敏。我的外部滚动视图是一个分页滚动视图,其中包含全屏或更大内容滚动视图。 Outter scrollview是水平和内部垂直。就像照片库一样。我发现当我缩放并滚动内部滚动视图时,只有当滚动视图向下滚动到内容的底部并且弹跳为OFF时,才会检测到慢速和长滑动手势的明显延迟。

另一个原因是内部scrollview弹跳属性伪随机地变为YES / NO。因此,这是构造函数中的代码,用于设置正在执行的内部滚动视图:

    if (UIInterfaceOrientationIsPortrait(forOrientation)) {
        self.minimumZoomScale = 1.0;
        self.maximumZoomScale = 1.0;    
        self.bounces = NO;
        self.alwaysBounceVertical = NO;
        self.scrollEnabled = NO;
    }else if (UIInterfaceOrientationIsLandscape(forOrientation)){
        self.minimumZoomScale = 1.333333f;
        self.maximumZoomScale = 1.333333f;
        self.bounces = YES;
        self.alwaysBounceVertical = YES;
        self.scrollEnabled = YES;
    }

    self.scrollsToTop = NO;
    self.showsVerticalScrollIndicator = YES;
    self.showsHorizontalScrollIndicator = NO;
    self.directionalLockEnabled = YES;
    self.delegate = self;



    self.pagingEnabled = NO;

    self.canCancelContentTouches = NO;
    self.delaysContentTouches = YES;

当iPad旋转时,弹跳也将进入滚动视图并且还会出现弹跳故障。

这是一个错误吗?还是只是我,我搞砸了?

提前感谢您的时间和兴趣!

更新: 我正在嵌套两个实际上是UIScrollView子类的scrollview。我这样做是因为我需要覆盖hitTest以及其他方法。我也尝试了这里描述的更好的解决方案http://openradar.appspot.com/8045239并没有取得任何好的结果。

2 个答案:

答案 0 :(得分:3)

我正在回答我自己的问题。

打开雷达的问题帖子上发布的错误解决方案,为了阻止uiscrollview调整大小并取消弹跳,它不是很清楚要隔离什么

基本上可以在layoutSubViews期间改变视图框架的一切只能通过双重检查来完成,如果大小等于layoutSubviews中编码的更改,那么它不会运行多次。

-(void)layoutSubviews {

///...


if (!self.bounces) {
             self.bounces = YES;
        }
        if(!self.scrollEnabled){
           self.scrollEnabled = YES;
        }
        if (!CGSizeEqualToSize(rect.size, self.contentSize)) {
            self.contentSize = rect.size;
        }
 if (self.zoomScale < MAXIMUM_ZOOM_SCALE ) {

            [self zoomToRect:ZOOM_RECT_MAKE animated:NO];// otherwise this line of code won't do anything at all


        }
}

答案 1 :(得分:0)

嵌套滚动视图将始终导致触摸响应问题。我假设内部是主要的 - 一个用户与更多人进行交互?一般来说,你可能不得不写一些你自己的触摸响应者(至少,这是我的经验,无论是代码还是SO)。使垂直滚动更加宽容,但只检测外部的窄范围滑动和拖动(近水平线)。这样,大多数触摸输入将被发送到内部视图。

就弹跳而言,移除您设置属性的其中一个地方,看看会发生什么。

这是哪种方法?希望这段代码驻留在UIView子类中......?