Thực ra những câu trả lời này thực sự gần với những gì tôi đã sử dụng nhưng tôi sẽ đăng bài riêng biệt vì nó khác. Về cơ bản zoomToRect không hoạt động chính xác nếu zoomScale đích giống với zoomScale hiện tại.
Bạn có thể thử scrollToRect nhưng tôi không có bất kỳ may mắn nào với điều đó.
Thay vì chỉ sử dụng contentOffset và đặt nó thành zoomRect.origin và lồng trong khối hoạt ảnh.
[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];
Tôi đã gặp trường hợp 'thỉnh thoảng không thành công', khiến hoạt ảnh chạy ở thời lượng mặc định. Trường hợp này dường như xảy ra khi các kích thước trực tiếp trước đó và nhắm mục tiêu phù hợp, thậm chí thông qua nguồn gốc khác nhau. Đây là mã hoạt hình mới của tôi, thêm dòng scrollRectToVisible, và tôi không nhấn trường hợp lỗi này nữa. [UIView animateWithDuration: 2 delay: 0 options: UIViewAnimationOptionBeginFromCurrentState animations:^{ [scrollView scrollRectToVisible: target animated: NO]; [scrollView zoomToRect: target animated: NO]; } hoàn thành: nil]; – fionbio
hay Nous tuyệt vời của nó !!! Nó hoạt động tốt Cảm ơn –