在转换期间删除实现UIScrollView相册时的故障

时间:2012-09-16 13:08:24

标签: iphone ios uiscrollview uiscrollviewdelegate

已经实现了一个UIScrollView专辑,其中在调用scrollViewDidEndDragging时生成+2和-2定位的子视图但添加子视图是一项代价高昂的操作,因此滑动不是那么顺利。在拖动结束时屏幕略微贴了一下。 我甚至尝试使用NSTimerperformSelector进行延迟呼叫,但是如果用户以速度滑过所有图像,则会立即调用所有延迟的呼叫,有时会使应用程序崩溃。

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    flyNumber = (NSInteger)(imageScrollView.contentOffset.x/imageScrollView.frame.size.width);
    [self createM2P2SubView];

    //[self performSelector:@selector(createM2P2SubView) withObject:nil afterDelay:0.1];
    //[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(createM2P2SubView) userInfo:nil repeats:NO];

    NSLog(@"End dragging   ...... %d",flyNumber);
}

请提供解决该故障的解决方案。

1 个答案:

答案 0 :(得分:1)

创建视图是一项昂贵的操作,但这基本上就是表视图的作用。当新单元格出现在屏幕上时,它会动态创建视图,并且重新使用视图,因为它们的创建成本很高。

尝试使用Time Profiler和Animation Profiler分析您的代码以找到瓶颈。

尝试重复使用您在+ 2 / -2偏移处插入的视图来加快速度。

另一个巧妙的技巧是使用UITableView而不是自我管理的UIScrollView。如果您需要它是水平的,那么只需将旋转变换应用于表视图。

既然你已经提到过Album这个词是你的标题,我假设每个视图都需要加载和显示图像?我没有使图像加载同步,而是使其成为异步,并使用微调器或其他东西为相册图像加载状态提供指示。