国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

ios通過SDWebImage實現圖片加載時的漸變效果

2019-10-21 18:47:04
字體:
來源:轉載
供稿:網友

先上效果圖:

這些圖片是在我限制了網速的情況下加載的:

ios,圖片加載漸變效果,sdwebimage,漸變,加載圖片

實現效果

思路解析

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

先看整體的實現代碼:

首先找到UIImageView+WebCache.m這個文件中的- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock這個函數(大約在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結束后,把animation去掉[self.layer removeAnimationForKey:@"transition"];

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宣威市| 柏乡县| 垫江县| 马边| 易门县| 务川| 固始县| 临城县| 墨脱县| 拜泉县| 上高县| 卓尼县| 东丰县| 盐池县| 天镇县| 左云县| 梅河口市| 措美县| 绥德县| 马山县| 宜昌市| 基隆市| 平果县| 方正县| 旌德县| 江源县| 通化市| 文成县| 洞口县| 中卫市| 广元市| 广南县| 旺苍县| 德州市| 百色市| 馆陶县| 防城港市| 新乐市| 钟祥市| 遂溪县| 阳城县|