На самом деле эти ответы очень близки к тому, что я в итоге использовал, но я выложу свои отдельно, так как они разные.По сути, zoomToRect не работает правильно, если целевой масштаб масштабирования совпадает с текущим.
Вы можете попробовать scrollToRect, но мне не повезло с этим.
Вместо этого просто используйтеcontentOffset и установите его в zoomRect.origin и вложите его в блок анимации.
[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];