In realtà queste risposte sono molto simili a quello che ho finito usando, ma le posterò separatamente perché è diverso. Fondamentalmente lo zoomToRect non funziona correttamente se lo zoom di destinazione è uguale a quello attuale.
Si potrebbe provare a scrollToRect ma non ho avuto fortuna con quello.
Invece basta usare contentOffset e impostarlo su zoomRect.origin e nidificare nel blocco di animazione.
[UIView animateWithDuration:duration
delay:0.f
options:UIViewAnimationOptionCurveEaseInOut
animations:^{
if (sameZoomScale) {
CGFloat offsetX = zoomRect.origin.x * fitScale;
CGFloat offsetY = zoomRect.origin.y * fitScale;
[self.imageScrollView setContentOffset:CGPointMake(offsetX, offsetY)];
}
else {
[self.imageScrollView zoomToRect:zoomRect
animated:NO];
}
}
completion:nil];
Stavo premendo questo caso "occasionalmente non funziona", che fa sì che l'animazione venga eseguita con una durata predefinita. Questo caso sembra verificarsi quando le dimensioni rect precedenti e di destinazione corrispondono, anche se le origini sono diverse. Ecco il mio nuovo codice di animazione, aggiungendo la linea scrollRectToVisible e non sto più colpendo questo caso di errore. [UIView animateWithDuration: 2 ritardo: 0 opzioni: UIViewAnimationOptionBeginFromCurrentState animazioni:^{ [scrollView scrollRectToVisible: target animated: NO]; [scrollView zoomToRect: target animated: NO]; } completamento: nil]; – fionbio
fieno il suo grande nous !!! Funzionante bene Grazie –