A mio modo di vedere l'immagine, i dati per la visualizzazione dell'immagine provengono da Url, le immagini sono circa 1-3 MB. Se l'utente salta, allora voglio caricare l'immagine successiva, Ogni cosa funziona bene se strisciata lentamente, ma quando ho fatto scorrere velocemente voglio annullare l'operazione precedente e iniziare con il nuovo URL.NsoperationQueue Annullare tutte le operazioni non è cancellato fino a quando non termina l'operazione
Per es. se l'utente fa scorrere 4 volte se le operazioni per la 2a e 3a immagine sono nel mezzo, voglio cancellarle e iniziare a scaricare la 4a immagine
Ma ora Al posto della 4a immagine sto ottenendo la prima 2a immagine segue 3a e poi appare la 4 ° immagine.
Ecco il mio codice di esempio
- (void)handleSwipeLeft:(UISwipeGestureRecognizer *)aSwipeGestureRecognizer {
[BackgroundOperation cancelAllOperations]; // To cancel previous one
[self performSelector:@selector(LoadImage) withObject:nil afterDelay:0.1];
}
-(void)LoadImage
{
BackgroundOperation=[[NSOperationQueue alloc]init];
imgvww.image=[UIImage imageNamed:@"loader.png"]; // Place holder till download finishes
[BackgroundOperation addOperationWithBlock:^
{
UIImage *img=[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[[self.ItemDetails objectAtIndex:0] objectForKey:@"ImageUrl"]]]]; // Getting data from URL
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
imgvww.image=img; //Adding to image view after completion
}];
}];
}
Grazie.
Si prega di fare uno sforzo per formattare il codice in modo che altre persone possano leggerlo. – jtbandes
Stai ricreando 'BackgroundOperation' ogni volta che un'immagine deve essere caricata (con' BackgroundOperation = [[NSOperationQueue alloc] init]; ')? –