已经实现了一个UIScrollView专辑,其中在调用scrollViewDidEndDragging
时生成+2和-2定位的子视图但添加子视图是一项代价高昂的操作,因此滑动不是那么顺利。在拖动结束时屏幕略微贴了一下。
我甚至尝试使用NSTimer
或performSelector
进行延迟呼叫,但是如果用户以速度滑过所有图像,则会立即调用所有延迟的呼叫,有时会使应用程序崩溃。
-(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);
}
请提供解决该故障的解决方案。
答案 0 :(得分:1)
创建视图是一项昂贵的操作,但这基本上就是表视图的作用。当新单元格出现在屏幕上时,它会动态创建视图,并且重新使用视图,因为它们的创建成本很高。
尝试使用Time Profiler和Animation Profiler分析您的代码以找到瓶颈。
尝试重复使用您在+ 2 / -2偏移处插入的视图来加快速度。
另一个巧妙的技巧是使用UITableView而不是自我管理的UIScrollView。如果您需要它是水平的,那么只需将旋转变换应用于表视图。
既然你已经提到过Album这个词是你的标题,我假设每个视图都需要加载和显示图像?我没有使图像加载同步,而是使其成为异步,并使用微调器或其他东西为相册图像加载状态提供指示。