国产探花免费观看_亚洲丰满少妇自慰呻吟_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開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 林州市| 获嘉县| 英山县| 大连市| 永济市| 白水县| 安陆市| 兴国县| 商城县| 邢台市| 隆林| 锡林郭勒盟| 河南省| 宜章县| 崇仁县| 呼伦贝尔市| 玉门市| 沂水县| 卢龙县| 红安县| 舟曲县| 石台县| 吴川市| 通渭县| 得荣县| 两当县| 罗江县| 丰宁| 温泉县| 康乐县| 麻江县| 商河县| 台州市| 浦县| 玉环县| 罗田县| 沈丘县| 邵阳县| 洪江市| 西丰县| 曲靖市|