2013-04-04 25 views
3

我使用SDWebimage加载和缓存图片,现在我正在寻找一种方法来滑动/滚动图片。我尝试过不同的方法,但我似乎无法得到它的工作,有人可以帮助我吗?SDWebimage滚动

+0

试过MWPhotoBrowser ???/ – 2013-04-04 12:32:01

+0

这不使用SDWebimage缓存,这是我的应用程序中最重要的事情 – Daantjeeuh 2013-04-04 12:39:50

回答

3

你只需做你的滚动图片浏览器,你原本可以达到的,但不是同步设置image属性,你只需要调用的方法SDWebImagesetImageWithURL(从UIImageView类)。

要告诉你一个快速和肮脏的实施,创建一个UIScrollView,打开页面,并在viewDidLoad可以设置内容大小和加载第一图像,像这样:

[self.scrollView setContentSize:CGSizeMake(self.view.bounds.size.width * [self.objects count], 
              self.view.bounds.size.height)]; 

dispatch_async(dispatch_get_main_queue(), ^{ 
    ImageBrowserObject *object = self.objects[0]; 
    [object scrollView:self.scrollView addImageViewIfNeededForIndex:0]; 
}); 

你也想设置你的控制器作为该滚动视图的委托,然后处理scrollViewDidScroll事件:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    static NSInteger lastKnownIndex = -1; 

    NSInteger currentIndex = scrollView.contentOffset.x/scrollView.frame.size.width + 0.5f; 
    NSInteger nextIndex = currentIndex + 1; 
    NSInteger prevIndex = currentIndex - 1; 
    if (prevIndex < 0) prevIndex = 0; 

    if (currentIndex == lastKnownIndex) 
     return; 

    // add the imageviews we need, remove the ones we don't 

    [self.objects enumerateObjectsUsingBlock:^(ImageBrowserObject *object, NSUInteger idx, BOOL *stop) { 
     if (idx >= prevIndex && idx <= nextIndex) 
      [object scrollView:scrollView addImageViewIfNeededForIndex:idx]; 
     else 
      [object scrollView:scrollView removeImageViewIfNeededForIndex:idx]; 
    }]; 

    lastKnownIndex = currentIndex; 
} 

而且我ImageBrowserObject定义如下:

@interface ImageBrowserObject : NSObject 

@property (nonatomic, strong) NSString *title; 
@property (nonatomic, strong) NSURL *url; 
@property (nonatomic, weak) UIImageView *imageView; 

@end 

@implementation ImageBrowserObject 

- (id)initWithTitle:(NSString *)title URL:(NSURL *)url 
{ 
    self = [super init]; 
    if (self) { 
     _title = title; 
     _url = url; 
    } 
    return self; 
} 

- (void)scrollView:(UIScrollView *)scrollView addImageViewIfNeededForIndex:(NSInteger)index 
{ 
    if (self.imageView) 
     return; 

    CGRect frame = CGRectMake(index * scrollView.frame.size.width, 
           0.0, 
           scrollView.frame.size.width, 
           scrollView.frame.size.height); 
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:frame]; 
    [scrollView addSubview:imageView]; 
    [imageView setImageWithURL:self.url placeholderImage:[UIImage imageNamed:@"placeholder.png"]]; 
    self.imageView = imageView; 
} 

- (void)scrollView:(UIScrollView *)scrollView removeImageViewIfNeededForIndex:(NSInteger)index 
{ 
    if (!self.imageView) 
     return; 

    [self.imageView removeFromSuperview]; 
    self.imageView = nil; 
} 

@end 

这是一个非常简单的实现,但我怀疑你明白了。