iOS SDWebImage fade in new image

后端 未结 8 1388
北海茫月
北海茫月 2021-01-31 06:36

I\'ve been using SDWebImage on my iPhone app to handle all of the image loading. I am using a placeholder image, and I want to crossfade or fade in the new image once it loads.

相关标签:
8条回答
  • 2021-01-31 06:48

    Try out this:

    [self.myImage sd_setImageWithURL:storyThumbnailURL placeholderImage:[UIImage imageNamed:@"xyz"] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
        if (cacheType == SDImageCacheTypeNone) {
            self.myImage.alpha = 0;
            [UIView animateWithDuration:0.3 animations:^{
                self.myImage.alpha = 1;
            }];
        } else {
            self.myImage.alpha = 1;
        }
    }];
    
    0 讨论(0)
  • 2021-01-31 06:51

    This extension code worked better for me.

    extension UIImageView {
      public func setImageWithFadeFromURL(url: NSURL, placeholderImage placeholder: UIImage? = nil, animationDuration: Double = 0.3) {
         self.sd_setImageWithURL(url, placeholderImage: placeholder) { (fetchedImage, error, cacheType, url) in
            if error != nil {
                print("Error loading Image from URL: \(url)\n(error?.localizedDescription)")
            }
    
            self.alpha = 0
            self.image = fetchedImage
            UIView.transitionWithView(self, duration: (cacheType == .None ? animationDuration : 0), options: .TransitionCrossDissolve, animations: { () -> Void in
                self.alpha = 1
            }, completion: nil)
        }
      }
    
      public func cancelImageLoad() {
        self.sd_cancelCurrentImageLoad()
      }
    }
    
    0 讨论(0)
  • 2021-01-31 06:57

    SWIFT:

    func setSDWebImageWithAnimation(imageViewToSet mImageView:UIImageView, URLToSet imageURL:NSURL!)
        {
            mImageView.image = UIImage(named: "favouritePlaceholder")
            SDWebImageManager.sharedManager().downloadImageWithURL(imageURL, options: nil, progress: nil) { (downloadedImage:UIImage!, error:NSError!, cacheType:SDImageCacheType, isDownloaded:Bool, withURL:NSURL!) -> Void in
                mImageView.alpha = 0
                UIView.transitionWithView(mImageView, duration: 1.0, options: UIViewAnimationOptions.TransitionCrossDissolve, animations: { () -> Void in
                    mImageView.image = downloadedImage
                    mImageView.alpha = 1
                    }, completion: nil)
    
            }
        }
    
    0 讨论(0)
  • 2021-01-31 07:01

    You could set the imageView.alpha to 0 right before the animation block, then in the animation block have it animate back to imageView.alpha = 1.0;

    // load placeholder image
    NSURL *url = ...
    _imageView = [[UIImageView alloc] init];
    [_imageView setImage:[UIImage imageNamed:@"loading.jpg"]];
    
    // request image
    SDWebImageManager *manager = [SDWebImageManager sharedManager];
    [manager downloadWithURL:url
                delegate:self
                 options:0
                 success:^(UIImage *image, BOOL cached) {
    
                      imageView.alpha = 0.0;
                     [UIView transitionWithView:_imageView
                                       duration:3.0
                                        options:UIViewAnimationOptionTransitionCrossDissolve
                                     animations:^{
                                         [_imageView setImage:image];
                                          imageView.alpha = 1.0;
                                     } completion:NULL];
    
    }
    failure:nil];
    
    0 讨论(0)
  • 2021-01-31 07:02

    For SWIFT, i created this extension. It only fades in, when the image actually had to be downloaded from the web. If it was served from the cache, then it won't fade.

    import UIKit
    import SDWebImage
    
    extension UIImageView {
    
        public func sd_setImageWithURLWithFade(url: NSURL!, placeholderImage placeholder: UIImage!)
        {        self.sd_setImageWithURL(url, placeholderImage: placeholder) { (image, error, cacheType, url) -> Void in
    
            if let downLoadedImage = image
            {
                if cacheType == .None
                {
                    self.alpha = 0
                    UIView.transitionWithView(self, duration: 0.2, options: UIViewAnimationOptions.TransitionCrossDissolve, animations: { () -> Void in
                        self.image = downLoadedImage
                        self.alpha = 1
                        }, completion: nil)
    
                }
            }
            else
            {
                self.image = placeholder
            }
            }
        }
    }
    
    0 讨论(0)
  • 2021-01-31 07:06

    SDWebImage now offers a built-in fade transition as of 4.3.0.

    imageView.sd_imageTransition = SDWebImageTransition.fadeTransition;
    imageView.sd_setImage(with: ...)
    

    See the documentation here, you can perform more complex transitions using their API.

    https://github.com/rs/SDWebImage/wiki/Advanced-Usage#image-transition-430

    0 讨论(0)
提交回复
热议问题