使用 SDWebImage 下载的图像的 UIImageView 幻灯片
Posted
技术标签:
【中文标题】使用 SDWebImage 下载的图像的 UIImageView 幻灯片【英文标题】:UIImageView slideshow from images downloaded with SDWebImage 【发布时间】:2014-02-15 23:09:11 【问题描述】:我正在为延时照片制作应用程序,我正在使用SDWebImage 从服务器下载+缓存照片,我想从一系列照片中制作幻灯片。我已经为 UIImageView 尝试了 SDWebImage 的方法setAnimationImagesWithURLs
,该方法有效,但我需要更多控制(我不想在 viewDidLoad 之后立即开始动画,...)。
我想在显示视图控制器后,它开始从 NSURL 数组中下载照片,只显示第一张图片,有播放/停止/下一个控件,用户可以点击它们开始动画...
在每个UIImageView动画教程中,他们都将图片加载到数组中,作为setAnimationImages:array
使用,但是看了this answer之后,好像不是个好主意。
那么正确的方法是什么?
【问题讨论】:
【参考方案1】:对于任何需要这个的人,根据Wain's 的回答,我想出了使用解决方案 SDWebImage 和 KASlideShow,效果很好。
这是我的代码:
self.slideshow = [[KASlideShow alloc] initWithFrame:CGRectMake(0,0,320,225)];
[self.slideshow setDelay:1]; // Delay between transitions
[self.slideshow setTransitionDuration:1]; // Transition duration
[self.slideshow setTransitionType:KASlideShowTransitionFade]; // Choose a transition type (fade or slide)
[self.slideshow setImagesContentMode:UIViewContentModeScaleAspectFill]; // Choose a content mode for images to display
self.slideshow.delegate = self;
SDWebImageManager *manager = [SDWebImageManager sharedManager];
for (NSURL *snap in self.imagesURLArray)
[manager downloadWithURL:snap options:0 progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished)
if (image)
[self.slideshow addImage:image];
];
// do not forget to add slideshow as a subview
[self.view addSubview:self.slideshow];
【讨论】:
我也遇到过类似的情况。我正在使用SDWebImageManager
创建幻灯片,我很困惑它是否正在缓存图像。你能检查我的问题here【参考方案2】:
如果您正在运行幻灯片放映,您通常会在每个图像之间有一个漂亮的过渡动画。如您所说,您还想暂停,手动跳过等。
使用单个图像视图不一定能很好地解决这个问题。您可能希望拥有 2 个图像视图并串联使用它们(淡入或移入和移出屏幕)。
SDWebImage 能够在后台为您下载图片 (SDWebImageDownloader.sharedDownloader
),因此您可以轻松地将下载与幻灯片动画分离。
NSTimer
适合运行幻灯片。您可以根据需要启动并使其无效。运行移动到下一个图像的方法也可以显式运行是必需的。
所以,您想要的不是图像视图动画。这是一个幻灯片组件,恰好是用(几个)图像视图实现的。
总而言之,利用现有代码:search CocoaControls。
【讨论】:
以上是关于使用 SDWebImage 下载的图像的 UIImageView 幻灯片的主要内容,如果未能解决你的问题,请参考以下文章
使用 SDWebImage 下载的图像的 UIImageView 幻灯片
如何在 SDWebImage 下载器中添加 UIImageView (UIActivityIndicatorForSDWebImage)?