最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ios通過SDWebImage實現(xiàn)圖片加載時的漸變效果

 更新時間:2017年04月13日 15:19:56   作者:Lee丶Way  
本篇文章主要介紹了ios通過SDWebImage實現(xiàn)圖片加載時的漸變效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下

先上效果圖:

這些圖片是在我限制了網(wǎng)速的情況下加載的:

實現(xiàn)效果

思路解析

想到漸變屬性的時候,自然而然的想起CATransition這個類

先看整體的實現(xiàn)代碼:

首先找到UIImageView+WebCache.m這個文件中的- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock這個函數(shù)(大約在44行處)

修改成這個樣子

- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock {
 [self sd_cancelCurrentImageLoad];
 objc_setAssociatedObject(self, &imageURLKey, url, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

 if (!(options & SDWebImageDelayPlaceholder)) {
  dispatch_main_async_safe(^{
   self.image = placeholder;
  });
 }

 if (url) {

  // check if activityView is enabled or not
  if ([self showActivityIndicatorView]) {
   [self addActivityIndicator];
  }

  __weak __typeof(self)wself = self;
  id <SDWebImageOperation> operation = [SDWebImageManager.sharedManager downloadImageWithURL:url options:options progress:progressBlock completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
   [wself removeActivityIndicator];
   if (!wself) return;
   dispatch_main_sync_safe(^{
    if (!wself) return;
    if (image && (options & SDWebImageAvoidAutoSetImage) && completedBlock)
    {
     completedBlock(image, error, cacheType, url);
     return;
    }
    else if (image) {
     CATransition *animation = [CATransition animation];
     animation.duration = .85f;
     animation.type = kCATransitionFade;
     animation.removedOnCompletion = YES;
     [wself.layer addAnimation:animation forKey:@"transition"];
     wself.image = image;
     [wself setNeedsLayout];
    } else {
     if ((options & SDWebImageDelayPlaceholder)) {
      wself.image = placeholder;
      [wself setNeedsLayout];
     }
    }
    if (completedBlock && finished) {
     completedBlock(image, error, cacheType, url);
    }
   });
  }];
  [self.layer removeAnimationForKey:@"transition"];
  [self sd_setImageLoadOperation:operation forKey:@"UIImageViewImageLoad"];
 } else {
  dispatch_main_async_safe(^{
   [self removeActivityIndicator];
   if (completedBlock) {
    NSError *error = [NSError errorWithDomain:SDWebImageErrorDomain code:-1 userInfo:@{NSLocalizedDescriptionKey : @"Trying to load a nil url"}];
    completedBlock(nil, error, SDImageCacheTypeNone, url);
   }
  });
 }
}

在大約30行處添加

     CATransition *animation = [CATransition animation];
     animation.duration = .85f;
     animation.type = kCATransitionFade;
     animation.removedOnCompletion = YES;
     [wself.layer addAnimation:animation forKey:@"transition"];

不需要過多解釋kCATransitionFade意思是 交叉淡化過渡

這個 type 還有幾個兄弟:

  1. kCATransitionFade  //交叉淡化過渡                    
  2. kCATransitionMoveIn  //移動覆蓋原圖                    
  3. kCATransitionPush  //新視圖將舊視圖推出去                    
  4. kCATransitionReveal  //底部顯出來

因為我們的需求是漸變嘛,所以就使用kCATransitionFade

注意啦

一定要在下載圖片的這個Block結(jié)束后,把animation去掉[self.layer removeAnimationForKey:@"transition"];

為什么呢,如果你不去掉,在cell復(fù)用的時候,會出現(xiàn)加載重復(fù)的情況呢。/壞笑 不信的話,你別加呀。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

福建省| 敦煌市| 义乌市| 广宁县| 平利县| 抚顺县| 准格尔旗| 丰顺县| 禄丰县| 桃源县| 正宁县| 东兴市| 札达县| 驻马店市| 友谊县| 岚皋县| 呼玛县| 镶黄旗| 内江市| 和顺县| 西林县| 大冶市| 手机| 同心县| 田东县| 高雄县| 那曲县| 五台县| 文登市| 延边| 海口市| 乌鲁木齐县| 泽普县| 茂名市| 清徐县| 永康市| 安达市| 腾冲县| 嘉黎县| 日土县| 兴业县|