2015-06-13 3 views
1

Я создаю слайд-шоу с использованием UIImageView, а ссылки изображения находятся в массиве, поэтому пока я был на нем, я узнал, что SDWebImageManager позволяет сразу ударять по URL-адресам, а затем кэширует изображения для последующего использования.iOS: SDWebImageManager не кэширует изображение

Но то, что я контролирую в своем приложении, заключается в том, что первое изображение кэшируется, я считаю, но второй URL-адрес изображения всегда попадает.

Вот мой код:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    arry = [[NSMutableArray alloc] init]; 
    [arry addObject:@"http://adjingo.2cimple.com/content/151/Image/6291.jpg"]; 
    [arry addObject:@"http://adjingo.2cimple.com/content/151/Image/6290.jpg"]; 

    NSURL *imageURL = [NSURL URLWithString:[arry objectAtIndex:0]]; 

    __block UIActivityIndicatorView *activityIndicator; 
    __weak UIImageView *weakImageView = self.imageView; 
    SDWebImageManager *manager = [SDWebImageManager sharedManager]; 
    [manager downloadImageWithURL:imageURL 
         options:0 
        progress:^(NSInteger receivedSize, NSInteger expectedSize) { 
         // progression tracking code 
         if (!activityIndicator) { 
          [weakImageView addSubview:activityIndicator = [UIActivityIndicatorView.alloc initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]]; 
          //activityIndicator.center = self.imageView.center; 
          [activityIndicator startAnimating]; 
         } 
        } 
        completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { 
         if (image) { 
          // do something with image 
          [activityIndicator removeFromSuperview]; 
          activityIndicator = nil; 
          [self.imageView setImage:image]; 
         } 
        }]; 

//Timer to do slideshow for images 
timer = [NSTimer scheduledTimerWithTimeInterval: 5.0 
              target: self 
              selector: @selector(handleTimer:) 
              userInfo: nil 
              repeats: YES]; 
} 

Вот handleTimer код, чтобы перезагрузить изображение с точки зрения изображения, каждые 5 секунд:

-(void) handleTimer: (NSTimer *) timer { 

     currentImage++; 
     if (currentImage >= arry.count) 
      currentImage = 0; 

     __block UIActivityIndicatorView *activityIndicator; 
     __weak UIImageView *weakImageView = self.imageView; 
     SDWebImageManager *manager = [SDWebImageManager sharedManager]; 
     [manager downloadImageWithURL:imageURL 
         options:0 
        progress:^(NSInteger receivedSize, NSInteger expectedSize) { 
         // progression tracking code 
         if (!activityIndicator) { 
          [weakImageView addSubview:activityIndicator = [UIActivityIndicatorView.alloc initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]]; 
          //activityIndicator.center = self.imageView.center; 
          [activityIndicator startAnimating]; 
         } 
        } 
        completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { 
         if (image) { 
          // do something with image 
          [activityIndicator removeFromSuperview]; 
          activityIndicator = nil; 
          [self.imageView setImage:image]; 
         } 
        }]; 
} 

Вот где я могу контролировать использование сети: enter image description here

Прошу вас, если я неправильно использовал SDWebImageManager.

Благодаря

+0

Никто не знает ??? – hyd00

ответ

0

мой родной язык китайский, не English.Maybe я не могу выразить свою мысль ясно, в то время как я буду стараться изо всех сил, чтобы сказать моему idea.if я запутать вас, мне очень жаль.

Я не могу стручок SDWebimage, потому что моя страна блоки Google иногда, поэтому я не могу воспроизвести вашу scenarios.While я до сих пор дать свой совет, который может помочь вам

Прежде всего, ваш дал нам немного context.Maybe вы можете разместите дополнительную информацию о переменных-членах и свойствах. При копировании кода в Xcode. Мне нужно добавить их самостоятельно.

Во-вторых, вы имеете в виду, когда вы используете
NSURL *imageURL = [NSURL URLWithString:[arry objectAtIndex:1]];,

sdwebimage хиты URLs каждый раз, а не использовать URL, кэш? вы можете получить источник изображения NSLog cacheType.

completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { 
         if (image) {              
          NSLog(@"%d",cacheType); 
          [activityIndicator removeFromSuperview]; 
          activityIndicator = nil; 
          [self.imageView setImage:image]; 
        } 
        }];` 

SDImageCacheTypeNone означает, что изображение происходит из сети.

SDImageCacheTypeDisk означает, что изображение происходит с диска.

SDImageCacheTypeMemory означает, что изображение происходит из памяти.

В-третьих, потому что downloadWithURL:options:completed: вызывается не по основной теме. Я сомневаюсь, что с вашей мыслью все равно.