UIScrollView失败'反弹'效果没有任何理由

时间:2012-02-27 16:21:11

标签: ios ipad uiscrollview

我为iPad创建了一个应用程序,可让您浏览一些演示文稿......有两种视图:演示文稿列表和向您显示演示文稿的视图。 当用户选择演示文稿时(在PresentationListController中),我在另一个视图(PresentationViewController)中显示演示文稿。 PresentationViewController包含一个带有页面列表的UIScrollView ...问题是,经过一段时间,没有导致此问题的重复事件,UIScrollView'失去'它的反弹能力......所以滚动不顺畅,它是比如滚动刚性视图而没有那种花哨的弹跳效果......用户仍然可以滚动,但效果非常难看。问题是,即使我返回PresentationListController并选择一个新的PresentationViewController,问题仍然存在...显示的新演示文稿有这个问题。 我认为这是因为导航控制器将UIView保留在内存中并在我打开新的演示文稿时重复使用它,但事实并非如此,因为我调试并看到当我更改演示文稿时,调用dealloc方法PresentationViewController。

那么,我该如何处理这个问题?

编辑

我找到了如何重现它:我正在做一个打开页面列表的动画,以及一个关闭它的动画。当我打开一个包含大量页面的演示文稿(以便UIScrollView的contentSize> UIScrollView的宽度)时,我没有遇到任何问题。但是当我在只有一个页面的演示文稿中打开和关闭页面列表时,问题就开始了。我编写了用于执行动画+

的代码

这是我用来执行打开和关闭页面列表的动画的代码:

- (IBAction)showPagesView:(id)sender {
    if (pagesListVisible) {
            [self resetNavigationControls];
        } else {
            [self resetNavigationControls];
            scvPages.frame = CGRectMake(0, 960, 768, 0);
            scvPages.alpha = 0.0f;

            [btnPages setImage:[UIImage imageNamed:@"thumbON.png"] forState:UIControlStateNormal];

            [UIView animateWithDuration:0.7 animations:^{
                scvPages.frame = CGRectMake(0, 760, 768, 200);
                scvPages.alpha = 1.0f;
                pagesListVisible = YES;
            } completion:^(BOOL finished) {
                if (finished) {
                    scvPages.contentSize = scvPages_ContentSize;
                }
            }];
    }   

}

这是我用来隐藏页面列表(和其他视图)的方法

- (void)resetNavigationControls {
if (pagesListVisible) {
        [btnPages setImage:[UIImage imageNamed:@"thumb.png"] forState:UIControlStateNormal];
        hidePages = YES;
        // Nascondi la lista delle pagine.
        [UIView animateWithDuration:0.7
                         animations:^ 
         {
             scvPages.frame = CGRectMake(0, 960, 768, 0);
             scvPages.alpha = 0.0f;
         } 
            completion:^(BOOL finished)
         {
             if (finished) {
                 scvPages.contentSize = scvPages_ContentSize;
                 pagesListVisible = NO;
            }
         }
         ];
    }
}

希望它有所帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

如果我必须下注,那么您的滚动视图将被缩放,而不是将仿射变换重置为身份。我不是这方面的专家,但那就是我要看的地方。

如果您的滚动视图根本没有缩放,那么我建议您从应用的开头在计时器上记录scrollview.bounces,.bouncesZoom,.alwaysBounceVertical和.alwaysBounceHorizo​​ntal的值,看看是否有任何更改值同时触发你的bug。当然,你希望所有人都是肯定的。

祝你好运,

达明