2012-07-31 67 views
0

我只是想知道如果有人能为我解释这段代码,所以我可以从中学习。我试图让我的应用程序有一个滚动从左到右滚动的图片负载(从互联网),但事情是,它必须有延迟加载。所以我做了一些教程,并想出如何做到这一点,但我真的不明白它。所以我希望某种灵魂可以解释一步iOS UIScrollView懒加载

如何偷懒负载阶跃这是我从教程了解到代码:

-(void)scrollViewDidScroll:(UIScrollView *)myScrollView { 
/** 
* calculate the current page that is shown 
* you can also use myScrollview.frame.size.height if your image is the exact size of your scrollview 
*/ 
int currentPage = (myScrollView.contentOffset.y/currentImageSize.height); 

// 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 ([myScrollView viewWithTag:(currentPage +1)]) { 
    return; 
} 
else { 
    // view is missing, create it and set its tag to currentPage+1 
} 

/** 
* 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 < currentPages; i++) { 
    if ((i < (currentPage-1) || i > (currentPage+1)) && [myScrollView viewWithTag:(i+1)]) { 
     [[myScrollView viewWithTag:(i+1)] removeFromSuperview]; 
    } 
} 

}

+0

您可以节省很多痛苦,并查看Apple示例代码,该代码将向您展示如何实现“无限滚动”滚动条,该滚动条根据需要加载图像。我认为这是网址,但文件名是InfiniteScrollView.m - http://developer.apple.com/library/ios/#samplecode/StreetScroller/Listings/StreetScroller_InfiniteScrollView_m.html – 2012-07-31 23:07:01

回答

1

关于在scrollView上的延迟加载,我会建议使用UITableView来代替。苹果公司在这个组件上的表现非常出色。

如果你想连续滚动(pagingEnabled = NO;),你可以让它们保持水平(见EasyTableView code,效果很好),并停止页面模式,这样你就可以得到你正在寻找的行为。

+0

正在寻找uiscrollview和note uitableview – RollRoll 2013-01-12 16:50:38

0

延迟加载基本上是取大块的数据(在这个例子中可以说是图片),只有当你需要它们时。在你的代码中,你有一个委托方法,当你滚动一个UIScrollView时被调用。 - (void)scrollViewDidScroll:(UIScrollView *)myScrollView函数决定何时实际获取数据。所以当你滚动时,你会发现你在滚动视图中的位置(例如你有10个图像要加载 - 你想知道屏幕当前是否显示图像编号1,2,3)等。这就是当前页面整数的含义。

既然您知道您正在查看哪个页面,我们希望实际获取图像。

if ([myScrollView viewWithTag:(currentPage +1)]) { 
    return; 
} 

上面的代码检查当前人看到的图像是否存在(因此当前页面+ 1)。如果确实如此,我们已经提取了它,并且我们退出了该功能。否则:

else { 
    // view is missing, create it and set its tag to currentPage+1 
} 

在这里,我们懒加载图像。例如,通过创建一个新线程并从服务器下载图像完成此操作。我们这样做,而视图不是当前页面,因为我们不希望图像在用户滚动时“弹出”。我们添加图像的视图获取标签(UIView具有“标签”属性);我们将标签设置为currentPage + 1,后者允许我们在需要时索引视图。

最后,我们有:

/** 
* 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 < currentPages; i++) { 
    if ((i < (currentPage-1) || i > (currentPage+1)) && [myScrollView viewWithTag:(i+1)])   { 
     [[myScrollView viewWithTag:(i+1)] removeFromSuperview]; 
    } 
} 

在这里,我们用我们当前是可变的,通过我们设置的标签索引他们通过我们的所有视图进行迭代。如果标签不是当前页面的一个(请记住,我们不想要任何弹出!),我们将它从scrollview中移除并释放一些内存。

希望有帮助。

0

也许这会帮助你。

  1. 从这里https://github.com/nicklockwood/AsyncImageView/下载总数异步ImageView的文件,并将其包含到您的项目。

  2. 将在厦门国际银行文件的ImageView并改变它的类AsynchronousImageView而不是UIImageView的

  3. 写在你的.h文件

    IBOutlet中AsynchronousImageView * _artworkImg;

  4. 写在你的。m文件

    [_artworkImg loadImageFromURLString:@“Your Image Url”];