2013-07-18 18 views
22

ile bir sunucudan bir görüntü indirmek ve bir UIImageView içine koymak için çok basit:UIImageView + AFNetworking setImageWithURL AFNetworking ile animasyon

[imageView setImageWithURL:[NSURL URLWithString:@"http://i.imgur.com/r4uwx.jpg"] placeholderImage:[UIImage imageNamed:@"placeholder-avatar"]]; 

Nasıl (ı bir efektle görüntünün bu değişikliği yapmak istiyorsanız yaklaşık belki solmaya) ???

Bu yüzden çok fazla görüntü içeren bir slayt gösterisi yapmak istiyorum.

cevap

45

animateWithDuration, success satırını sağlayan setImageWithURL yorumlamasıyla birlikte kullanabilirsiniz.

[imageView setImageWithURL:[NSURL URLWithString:@"http://i.imgur.com/r4uwx.jpg"] 
      placeholderImage:[UIImage imageNamed:@"placeholder-avatar"] 
        success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) { 
         [UIView transitionWithView:self.imageView 
             duration:0.3 
              options:UIViewAnimationOptionTransitionCrossDissolve 
             animations:^{ 
              self.imageView.image = image; 
             } 
             completion:NULL]; 
        } 
        failure:NULL]; 

Güncelleme:: Bu arada

, sen eğer görüntü boş değil yer tutucuya, muhtemelen çapraz transitionWithView yoluyla çözülür isteyeyim

[imageView setImageWithURL:[NSURL URLWithString:@"http://i.imgur.com/r4uwx.jpg"] 
      placeholderImage:[UIImage imageNamed:@"placeholder-avatar"] 
        success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) { 
         self.imageView.alpha = 0.0; 
         self.imageView.image = image; 
         [UIView animateWithDuration:0.25 
             animations:^{ 
              self.imageView.alpha = 1.0; 
             }]; 
        } 
        failure:NULL]; 

Veya, İndirme işlemi tamamlanıncaya kadar resim görünümünün (ve self, görünüm veya görünüm denetleyicisine de baktığınızda) korunabileceği gerçeğinden endişe duyabilirsiniz:

__weak UIImageView *weakImageView = self.imageView; 
[imageView setImageWithURL:[NSURL URLWithString:@"http://i.imgur.com/r4uwx.jpg"] 
      placeholderImage:[UIImage imageNamed:@"placeholder-avatar"] 
        success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) { 
         UIImageView *strongImageView = weakImageView; // make local strong reference to protect against race conditions 
         if (!strongImageView) return; 

         [UIView transitionWithView:strongImageView 
             duration:0.3 
              options:UIViewAnimationOptionTransitionCrossDissolve 
             animations:^{ 
              strongImageView.image = image; 
             } 
             completion:NULL]; 
        } 
        failure:NULL]; 

Eğer indirme tamamlanıncaya kadar resim görünümü korunur, böylece siz de isteğe bağlı olarak görünümü denetleyicisi dealloc yönteminde Devam etmekte olan bir indirme işlemini iptal olabilir yapsan bile:

- (void)dealloc 
{ 
    // if MRC, call [super dealloc], too 

    [_imageView cancelImageRequestOperation]; 
} 
+0

Yine de devir döngülerine dikkat edin. –

+0

@MarceloFabri detaylandırır mısınız? Hangi devir tutmak? – timpone

+0

Rob, yükleme için Fade efektinin yapılıp yapılmayacağını biliyor musunuz? Demek istediğim:% 0 yüklendi = opaklık 0.0,% 100 yüklendi - donukluk 1,0 –

3

çevrimiçi istek başarı ile tamamladığında 0'dan 1'e ImageView alfa animasyon deneyin: Elbette

// You should not call an ivar from a block (so get a weak reference to the imageView) 
__weak UIImageView *weakImageView = self.imageView; 

// The AFNetworking method to call 
[imageView setImageWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://host.com/image1.png"]] placeholderImage:nil] 
        success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image){ 
        // Here you can animate the alpha of the imageview from 0.0 to 1.0 in 0.3 seconds 
        [weakImageView setAlpha:0.0]; 
        [UIView beginAnimations:nil context:NULL]; 
        [UIView setAnimationDuration:0.3]; 
        [weakImageView setAlpha:1.0]; 
        [UIView commitAnimations]; 
        } 
        failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error){ 
        // Your failure handle code  
        } 

Eğer tamamlama bloğunun içinde istediğiniz herhangi başka bir animasyon kullanabilirsiniz!

+0

yapmayın Başarı bloğundaki görüntüye weakImageView.image ayarlamayı unutun! – CyberDandy