有啥方法可以改变 UIScrollView 的 zoomToRect 的持续时间吗?
Posted
技术标签:
【中文标题】有啥方法可以改变 UIScrollView 的 zoomToRect 的持续时间吗?【英文标题】:Any way of changing the duration of zoomToRect for UIScrollView?有什么方法可以改变 UIScrollView 的 zoomToRect 的持续时间吗? 【发布时间】:2010-07-13 15:11:57 【问题描述】:有没有办法为[UIScrollView zoomToRect:zoomRect animated:YES]
的动画指定时长?
目前它要么是快速的animated:YES
,要么是即时的animated:NO
。
我想指定一个持续时间,例如[UIScrollView setAnimationDuration:2]
;或类似的东西。
提前致谢!
【问题讨论】:
【参考方案1】:使用 UIView 的动画。
解释起来有点长,所以我希望这个小例子能让你明白一点。 查看文档以获取更多说明
[UIView beginAnimations: nil context: NULL];
[UIView setAnimationDuration: 2];
[UIView setAnimationDelegate: self];
[UIView setAnimationDidStopSelector: @selector(revertToOriginalDidStop:finished:context:)];
expandedView.frame = prevFrame;
[UIView commitAnimations];
它来自我目前正在从事的一个项目,所以它有点具体,但我希望你能看到基础知识。
【讨论】:
【参考方案2】:我在 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)];
这有点作弊,但似乎大部分都有效。有时它确实会失败,但我不知道为什么。在这种情况下,它只是恢复到默认动画速度。
【讨论】:
我遇到了这种“偶尔会失败”的情况,这会导致动画以默认持续时间运行。这种情况似乎发生在先前和目标矩形大小匹配时,即使起源不同。这是我的新动画代码,添加了 scrollRectToVisible 行,我不再遇到这种失败情况。 [UIView animateWithDuration:2 延迟:0 选项:UIViewAnimationOptionBeginFromCurrentState 动画:^ [scrollView scrollRectToVisible:target animated:NO]; [scrollView zoomToRect:目标动画:否]; 完成:无];【参考方案3】:实际上,这些答案与我最终使用的答案非常接近,但我会单独发布我的答案,因为它不同。如果目标 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];
【讨论】:
以上是关于有啥方法可以改变 UIScrollView 的 zoomToRect 的持续时间吗?的主要内容,如果未能解决你的问题,请参考以下文章
xcode 4.5 和 UIScrollview 有啥问题?
UIScrollView + 改变方向 = 混乱的子视图(iPad)
Python有啥方法可以改变运行中程序的某个变量而不中断执行?