我为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;
}
}
];
}
}
希望它有所帮助。谢谢。
答案 0 :(得分:0)
如果我必须下注,那么您的滚动视图将被缩放,而不是将仿射变换重置为身份。我不是这方面的专家,但那就是我要看的地方。
如果您的滚动视图根本没有缩放,那么我建议您从应用的开头在计时器上记录scrollview.bounces,.bouncesZoom,.alwaysBounceVertical和.alwaysBounceHorizontal的值,看看是否有任何更改值同时触发你的bug。当然,你希望所有人都是肯定的。
祝你好运,达明