2012-08-08 25 views
7

私は自分のiPhoneアプリでSDWebImageを使用して、画像の読み込みをすべて処理しています。私はプレースホルダ画像を使用しています。新しい画像が読み込まれるとクロスフェードまたはフェードインしたいと思います。私はイメージを設定するために成功ブロックを使用しています、そしてそれは素晴らしい仕事です。私が何を試しても、イメージは消えません。私はメインスレッドにアニメーションコードを送ろうとしましたが、それはどちらも役に立たなかった。即座にロードされます...アニメーションはありません。iOS SDWebImage新しい画像をフェードイン

ここに私のコードです。何かご意見は?

// 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) { 

        [UIView transitionWithView:_imageView 
             duration:3.0 
             options:UIViewAnimationOptionTransitionCrossDissolve 
            animations:^{ 
             [_imageView setImage:image]; 
            } completion:NULL]; 

} 
failure:nil]; 

答えて

19

アニメーションブロックの直前でimageView.alphaを0に設定してから、アニメーションブロックで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

はとてもうまくいきました。ありがとうございました! – nothappybob

+0

偉大なこれは魔法のように働いた –

1

SWIFT: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

このソリューションは、キャッシュからイメージを読み込もうとしていません。それはすべてのイメージを何度も何度も再ダウンロードするつもりです。 –

7

、私はこの拡張機能を作成しました。画像が実際にウェブからダウンロードされなければならないときには、フェードインするだけです。それがキャッシュから提供された場合、それは消えません。

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

この拡張コードは私にとってはうまく機能しました。

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

この試してみてください:

[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; 
    } 
}]; 
関連する問題