2013-04-04 2 views
3

Я использую SDWebimage для загрузки и кеширования изображений, и теперь я ищу способ прокрутки или прокрутки изображений. Я пробовал разные подходы, но я не могу заставить его работать, может кто-нибудь мне помочь?Прокрутка SDWebimage

+0

Tried MWPhotoBrowser ???/ –

+0

Это не кеширование SDWebimage, что является самым важным в моем приложении – Daantjeeuh

ответ

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 

Это довольно упрощенная реализация, но я подозреваю, что вы поняли эту идею.

Смежные вопросы