Eigentlich sind diese Antworten wirklich nah an dem, was ich am Ende benutzt habe, aber ich werde meine separat veröffentlichen, da es anders ist. Grundsätzlich funktioniert der ZoomToRect nicht korrekt, wenn der ZielzoomScale derselbe ist wie der aktuelle.
Sie könnten versuchen, scrollenToRect, aber ich hatte kein Glück damit.
Verwenden Sie stattdessen einfach contentOffset und setzen Sie es auf die zoomRect.origin und verschachteln Sie diese im Animationsblock.
[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];
Ich schlug diesen 'gelegentlich schlägt fehl' Fall, der die Animation verursacht, um eine Standarddauer zu laufen. Diese Fälle scheinen zu vorkommen, wenn die vorherigen und die Ziel-Rect-Größen übereinstimmen, selbst wenn die Ursprünge unterschiedlich sind. Hier ist mein neuer Animationscode, der die scrollRectToVisible-Zeile hinzufügt, und ich treffe diesen Fehlerfall nicht mehr. [UIView animateWithDuration: 2 Verzögerung: 0 Optionen: UIViewAnimationOptionBeginFromCurrentState Animationen:^{ [scrollView scrollRectToVisible: Ziel animiert: NO]; [scrollView zoomToRect: Ziel animiert: NEIN]; } Vervollständigung: Null]; – fionbio
hay its Great nous !!! Es funktioniert gut Danke –