Można użyć animateWithDuration
w połączeniu z wersją setImageWithURL
, która dostarcza blok success
, np.
[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];
Lub, jeśli obraz zastępczy nie jest pusty, to prawdopodobnie chcą przejechać rozpuścić poprzez transitionWithView
:
[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];
Aktualizacja:
Nawiasem mówiąc, jeśli "niepokoi fakt, że widok obrazu (i jeśli odnosisz się do self
, widok lub kontroler widoku) jest zachowywany aż do zakończenia pobierania, możesz:
__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];
Nawet jeśli to zrobisz, widok obrazu jest zachowana aż zakończeniu pobierania, więc można ewentualnie także anulować pobieranie w toku w metodzie dealloc
kontrolera widoku:
- (void)dealloc
{
// if MRC, call [super dealloc], too
[_imageView cancelImageRequestOperation];
}
Należy jednak zachować ostrożność przy cyklach zatrzymywania. –
@MarceloFabri mógłbyś rozwinąć. Które zatrzymują cykl? – timpone
Rob, czy wiesz, czy jest możliwy efekt Zanikania podczas ładowania. Mam na myśli: 0% załadowane = krycie 0.0, 100% załadowane - krycie 1.0 –