Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 使用UIScrollView显示照片,滚动至照片时加载照片_Iphone_Objective C_Uiscrollview - Fatal编程技术网

Iphone 使用UIScrollView显示照片,滚动至照片时加载照片

Iphone 使用UIScrollView显示照片,滚动至照片时加载照片,iphone,objective-c,uiscrollview,Iphone,Objective C,Uiscrollview,我使用scrollview来显示我的照片,我想知道如何实现这样一种机制:当我滚动到照片时,它会被加载,这样可以节省内存。有人能给我一些建议或相关资料吗?谢谢 您可以使用,而且不必担心缓存等问题 网络图像 此库为UIImageVIew提供了一个类别,支持来自web的远程图像 它规定: 向Cocoa Touch框架添加web映像和缓存管理的UIImageView类别 异步图像下载程序 具有自动缓存过期处理的异步内存+磁盘映像缓存 保证同一URL不会被多次下载 保证伪造的URL不会被一次又一次地重试

我使用scrollview来显示我的照片,我想知道如何实现这样一种机制:当我滚动到照片时,它会被加载,这样可以节省内存。有人能给我一些建议或相关资料吗?谢谢

您可以使用,而且不必担心缓存等问题

网络图像 此库为UIImageVIew提供了一个类别,支持来自web的远程图像

它规定:

向Cocoa Touch框架添加web映像和缓存管理的UIImageView类别 异步图像下载程序 具有自动缓存过期处理的异步内存+磁盘映像缓存 保证同一URL不会被多次下载 保证伪造的URL不会被一次又一次地重试 表演

您可以使用,而且不必担心缓存等问题

网络图像 此库为UIImageVIew提供了一个类别,支持来自web的远程图像

它规定:

向Cocoa Touch框架添加web映像和缓存管理的UIImageView类别 异步图像下载程序 具有自动缓存过期处理的异步内存+磁盘映像缓存 保证同一URL不会被多次下载 保证伪造的URL不会被一次又一次地重试
表演

你可以自己做,使用

-(void)scrollViewDidScroll:(UIScrollView *)scrollView
别忘了定义滚动视图框架,这样页面就不会凌乱

之后,如果滚动视图达到某个偏移量,则加载图像

代码看起来有点像这样:

-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if (scrollView.contentOffset.y > 500) //for example if you choose to put your image in y:500
    {
        //load your images here you could load it in the main thread or use dispatch queue if you load it from web
    }
}
这样,当您向下滚动scrollView 500点时,它将加载您想要的图像

这只是基本的逻辑,从这里开始你可以做很多事情。我想说的是,不要太依赖开源git,试着让事情按照你自己的方式进行。如果到那时你还不知道怎么做,那就去试试git。但是我建议学习代码是如何工作的,而不仅仅是简单地使用它:3


编辑:您可能希望设置一种方法,在您从图像列组中滚动后从superview中删除图像以节省内存,并设置一些布尔标志,以便图像不会加载两次或两次以上

您可以自己执行此操作,请使用

-(void)scrollViewDidScroll:(UIScrollView *)scrollView
别忘了定义滚动视图框架,这样页面就不会凌乱

之后,如果滚动视图达到某个偏移量,则加载图像

代码看起来有点像这样:

-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if (scrollView.contentOffset.y > 500) //for example if you choose to put your image in y:500
    {
        //load your images here you could load it in the main thread or use dispatch queue if you load it from web
    }
}
这样,当您向下滚动scrollView 500点时,它将加载您想要的图像

这只是基本的逻辑,从这里开始你可以做很多事情。我想说的是,不要太依赖开源git,试着让事情按照你自己的方式进行。如果到那时你还不知道怎么做,那就去试试git。但是我建议学习代码是如何工作的,而不仅仅是简单地使用它:3


编辑:您可能希望设置一种方法,在您滚动出图像列组以节省内存后从superview中删除图像,并设置一些布尔标志,以便图像不会加载两次或更多次

,真的谢谢!我正在考虑如何处理图像滚动(我浏览过的图像),我不明白你说的是“设置一些布尔标志,这样图像就不会加载两次或更多”,你能告诉我这是如何工作的细节吗?基本上,当你滚动到某个偏移量时,你会正确加载图像吗???当你向下滚动,然后向上滚动,然后再向下滚动时会发生什么???代码将对调用图像的方法作出反应,它将加载两次或更多,因为您可以再次滚动到该偏移量。为了防止这种情况,您需要设置一个YES-NO逻辑。例如,创建一个名为“imageLoaded”的BOOL变量并将其定义为NO。然后在滚动逻辑上添加if(!imageLoaded){//load your images;imageLoaded=YES},这样,在加载图像后,标志将变为YES,图像将不再加载。我现在知道你的意思了。我想知道是否有必要发布经过的图像?就像这样:如果(contentoff.y<550){释放图像}。如果是真的,当我向后滚动时,似乎应该加载两次。如果使用ARC,则无需使用release,因为程序将确定是否需要释放对象。但是,如果没有,您可以选择是释放它还是从视图中删除它,因为如果释放它,则意味着您必须在图像中包含uiimageview alloc添加进度,真的谢谢!我正在考虑如何处理图像滚动(我浏览过的图像),我不明白你说的是“设置一些布尔标志,这样图像就不会加载两次或更多”,你能告诉我这是如何工作的细节吗?基本上,当你滚动到某个偏移量时,你会正确加载图像吗???当你向下滚动,然后向上滚动,然后再向下滚动时会发生什么???代码将对调用图像的方法作出反应,它将加载两次或更多,因为您可以再次滚动到该偏移量。为了防止这种情况,您需要设置一个YES-NO逻辑。例如,创建一个名为“imageLoaded”的BOOL变量并将其定义为NO。然后在滚动逻辑上添加if(!imageLoaded){//load your images;imageLoaded=YES},这样,在加载图像后,标志将变为YES,图像将不再加载。我现在知道你的意思了。我想知道是否有必要发布经过的图像?就像这样:如果(contentoff.y<550){释放图像}。如果是真的,当我向后滚动时,似乎应该加载两次。如果使用ARC,则无需使用release,因为程序将确定是否需要释放对象。但是,如果没有,您可以选择是释放它还是从视图中删除它,因为如果释放它,则意味着您必须包含