Ios 如何使用大量图像优化UIScrollView

Ios 如何使用大量图像优化UIScrollView,ios,uiscrollview,Ios,Uiscrollview,我一次在UIScrollView中加载所有图像,我知道这是一种糟糕的方法,所以有没有更好的方法来优化它?您可以使用教程来帮助您。尽管我也推荐user1212112所说的内容,并观看《WWDC 2011课程104-高级滚动视图技术》-(void)scrollViewDidScroll:(UIScrollView*)滚动视图{ - (void)scrollViewDidScroll:(UIScrollView *)scrollView { int currentPage = (scrollV

我一次在UIScrollView中加载所有图像,我知道这是一种糟糕的方法,所以有没有更好的方法来优化它?

您可以使用教程来帮助您。尽管我也推荐user1212112所说的内容,并观看《WWDC 2011课程104-高级滚动视图技术》

-(void)scrollViewDidScroll:(UIScrollView*)滚动视图{
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    int currentPage = (scrollView.contentOffset.x / scrollView.frame.size.width);

    // display the image and maybe +/-1 for a smoother scrolling
    // but be sure to check if the image already exists, you can
    // do this very easily using tags
    if ([scrollView viewWithTag:(currentPage + 1)]) {
        return;
    } else {
        // view is missing, create it and set its tag to currentPage+1
        UIImageView *iv = [[UIImageView alloc] initWithFrame:
            CGRectMake((currentPage + 1) * scrollView.frame.size.width,
                       0,
                       scrollView.frame.size.width,
                       scrollView.frame.size.height)];
        iv.image = [UIImage imageNamed:[NSString stringWithFormat:@"%i.jpg",
                                                                  currentPage + 1]];
        iv.tag = currentPage + 1;
        [sv addSubview:iv];
    }

    /**
     * using your paging numbers as tag, you can also clean the UIScrollView
     * from no longer needed views to get your memory back
     * remove all image views except -1 and +1 of the currently drawn page
     */
    for (int i = 0; i < 50; i++) {
        if ((i < (currentPage - 1) || i > (currentPage + 1)) &&
            [scrollView viewWithTag:(i + 1)]) {
            [[scrollView viewWithTag:(i + 1)] removeFromSuperview];
        }
    }
}
int currentPage=(scrollView.contentOffset.x/scrollView.frame.size.width); //显示图像,可能是+/-1,以便进行更平滑的滚动 //但是一定要检查图像是否已经存在,您可以 //使用标签很容易做到这一点 如果([scrollView viewWithTag:(当前页面+1)]){ 返回; }否则{ //缺少视图,请创建它并将其标记设置为currentPage+1 UIImageView*iv=[[UIImageView alloc]initWithFrame: CGRectMake((当前页面+1)*scrollView.frame.size.width, 0, scrollView.frame.size.width, 滚动视图.框架.尺寸.高度]; iv.image=[UIImage ImageName:[NSString stringWithFormat:@“%i.jpg”, 当前页面+1]]; iv.tag=当前页面+1; [sv addSubview:iv]; } /** *使用分页号作为标记,还可以清理UIScrollView *从不再需要的视图中恢复您的记忆 *删除除当前绘制页面的-1和+1之外的所有图像视图 */ 对于(int i=0;i<50;i++){ 如果((i<(当前页-1)|i>(当前页+1))&& [带标记的滚动视图:(i+1)]){ [[scrollView视图带标记:(i+1)]从SuperView中移除]; } } }
查看VSScrollview。它重用您传递给它的视图。它的使用与使用UITableview一样简单。实现以下数据源方法

-(VSScrollViewCell *)vsscrollView:(VSScrollView *)scrollView viewAtPosition:(int)position;
// implement this to tell VSScrollview the view at position "position" . This view is VSScrollviewCell or subclass of VSScrollviewCell.

-(NSUInteger)numberOfViewInvsscrollview:(VSScrollView *)scrollview;

// implement this to tell VSScrollview about number of views you want in VSSCrollview.

还有其他可选的数据源和委托方法,通过这些方法,您可以自定义VSScrollview的行为。您可以为每个视图设置不同的scrollview宽度、高度、间距甚至内容大小。

我知道它是旧线程,但是,任何寻求解决方案的人都可以看看这个:

所有的映像都来自远程服务器吗?这些映像都是相同的还是不同的?如果它们是相同的,您可以使用平铺,有关该主题的更多信息,请参阅《WWDC 2011年第104期课程-高级滚动视图技术》@AbdullahMd.Zubair No,localimages@user1212112图像是不同的。延迟加载是一种技术。仅加载可见的图像,并在两侧加载一些图像以实现平滑滚动。谢谢,我尝试了流畅的教程,延迟加载确实是更好的方法,但是如果我快速交换UIScrollView,延迟加载图像将不会出现。