有没有办法为[UIScrollView zoomToRect:zoomRect animated:YES]
的动画指定持续时间?
目前它可以是快animated:YES
或即时animated:NO
。
我想指定一段时间,例如[UIScrollView setAnimationDuration:2]
;或类似的东西。
提前致谢!
答案 0 :(得分:1)
使用UIView的动画。
解释时间有点长,所以我希望这个小例子可以解决一些问题。 查看文档以获取进一步的说明
[UIView beginAnimations: nil context: NULL];
[UIView setAnimationDuration: 2];
[UIView setAnimationDelegate: self];
[UIView setAnimationDidStopSelector: @selector(revertToOriginalDidStop:finished:context:)];
expandedView.frame = prevFrame;
[UIView commitAnimations];
这是我正在开展的一个项目,所以它有点具体,但我希望你能看到基础知识。
答案 1 :(得分:0)
我在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)];
}
这有点像作弊,但它似乎主要起作用。偶尔会失败,但我不知道为什么。在这种情况下,它只是恢复到默认动画速度。
答案 2 :(得分:0)
实际上这些答案非常接近我最终使用的答案,但我会分别发布,因为它是不同的。基本上,如果目标zoomScale与当前缩放比例相同,则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];