任何方式来改变UITcrollView的zoomToRect的持续时间?

有没有什么办法来指定[UIScrollView zoomToRect:zoomRect animated:YES]的animation持续时间?

目前它是快速animated:YES或即时animated:NO

我想指定一个持续时间,例如[UIScrollView setAnimationDuration:2] ; 或类似的东西。

提前致谢!

使用UIView的animation。

解释的时间有点长,所以我希望这个小例子能够澄清一些事情。 查看进一步的说明文件

 [UIView beginAnimations: nil context: NULL]; [UIView setAnimationDuration: 2]; [UIView setAnimationDelegate: self]; [UIView setAnimationDidStopSelector: @selector(revertToOriginalDidStop:finished:context:)]; expandedView.frame = prevFrame; [UIView commitAnimations]; 

这是来自我目前正在进行的一个项目,所以这是一个具体的,但我希望你能看到的基础知识。

我在UIScrollView子类中使用了这个方法:

 - (void)zoomToRect:(CGRect)rect duration:(NSTimeInterval)duration { [self setZoomLimitsForSize:rect.size]; if (duration > 0.0f) { [UIView beginAnimations:nil context:NULL]; [UIView setAnimationBeginsFromCurrentState:YES]; [UIView setAnimationDuration:duration]; } [self zoomToRect:rect animated:NO]; if (duration > 0.0f) [UIView commitAnimations]; [self zoomToRect:rect animated:(duration > 0.0f)]; } 

这是有点作弊,但似乎主要是工作。 偶尔它会失败,但我不知道为什么。 在这种情况下,它只是恢复到默认的animation速度。

其实这些答案是非常接近我最终使用,但我会分开张贴我的,因为它是不同的。 基本上,如果目标zoomScale与当前zoomScale相同,则zoomToRect无法正常工作。

你可以尝试scrollToRect,但我没有任何运气。

相反,只需使用contentOffset并将其设置为zoomRect.origin并嵌套在animation块中即可。

 [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];