我有UIScrollView和大约20个项目(UIViewControllers)。我每个页面上都有按钮,帮助我在这20个项目之间跳转。所以,如果我在第一个视图,并按下按钮,将我带到第18项,整个滚动视图滚动到该视图和动画滚动操作,所以我能够看到第1和第18项之间的所有视图。
是否可以在没有这个长动画的情况下从滚动视图中的第1个项目跳到第18个项目(我希望看到动画,就像我在两个相邻项目之间滚动一样)?
我认为这行代码可以帮助我阻止这种长滚动动画:
[scrollView scrollRectToVisible:rect animated:NO];
但没有运气。
有什么建议吗?
[编辑#1] 我滚动到特定视图的方法如下所示:
// I found view controller to which I want to scroll
CGRect rect = selectedViewController.view.frame;
float duration; // I calculate animation duration in some way now
[UIView beginAnimations:@"ScrollRectToVisible" context:nil];
[UIView setAnimationCurve:UIViewAnimationTransitionNone];
[scrollView scrollRectToVisible:rect animated:NO];
[UIView commitAnimations];
使用此代码,当我在UIScrollView中从第一个视图滚动到最后一个视图时,应用程序滚动到最后一个视图,并且该动画将持续我计算的持续时间值。我看到第一个和最后一个之间存在的每个视图。我的愿望是立即从第一个视图滚动到最后一个视图,而不会看到它们之间的所有视图。
当我将crollRectToVisible行改为:
时[scrollView scrollRectToVisible:rect animated:YES];
同样的事情发生了,这次滚动动画的发生速度提高了5倍,但仍然显示了所有视图。
当我从方法中删除动画时,立即发生转换。我的问题是如何在UIScrollView中滑动到邻居视图时实现这个看起来相同的动画?
答案 0 :(得分:1)
唯一可能不显示这两者之间所有观点的方法是......根本没有它们,或者使它们不可见。
但是,可能不满足您的简单解决方案是将所有视图的alpha设置为零,然后滚动。问题是它会滚动得非常快,我想。
另一个更复杂的解决方案是删除那些视图,或者再次将其alpha设置为零,但将目标视图移到第一个旁边 - 这将为您提供所需的效果。在此滚动之后,您应该将该视图移回其原点并同时滚动到它的原点(通过更改contentOffset) - 然后用户将不会注意到它,然后将所有视图返回到屏幕。
所以它看起来就像某种缩小你的滚动视图。
答案 1 :(得分:1)
所以你需要的是如下:
现在你的阵列已经恢复了原样,用户也不是更明智的。