我想淡出 View ,因为它在父 UIScrollview 中滚动。当淡出动画开始时, ScrollView 停止滚动。当淡入淡出完成时,它会跳转到正确的位置。
我的淡出是通过 animateWithDuration 和 block 对象实现的,在我在 scrollViewWillBeginDragging 中检测到的页面更改时触发。
有谁知道如何让它们同时发生?需要说明的是,我并不是在“动画化”UIScrollView 的滚动——而是通过用户的滑动交互来实现的。
编辑:
这是我用来淡化 UIView 的代码。此代码位于 UIViewController 派生类中,它是 UIScrollView 的委托(delegate)。当用户开始拖动他的手指时,我想淡出 subview 。但是当用户开始拖动手指时, subview 消失并且滚动停止。在 subview 完全淡出后, ScrollView 将捕捉到用户手指所在的位置。
-(void)scrollViewWillBeginDragging:(UIScrollView*)scrollView
{
[UIView animateWithDuration:0.5
animations:^
{
self.subView.alpha = 0.0f;
}
completion:^(BOOL finished) { }];
}
最佳答案
有点晚了,但如果你想继续使用 block ,你可以使用:
animateWithDuration:delay:options:animation:complete:
将“UIViewAnimationOptionAllowUserInteraction”添加到选项以允许在滚动时进行交互。
我相信您仍然会遇到延迟问题。这是我能解释的最好方法。请提前原谅我,因为我可能使用了错误的术语。所有动画都必须在主线程上运行。当您调用动画时,iOS 首先 *P* 处理然后它 *R* 在它生成 *F* 帧之前渲染。看起来像这样。
PPPPRRRRFFFFFFFFFFFFFFFFFF
但由于 ScrollViews 不知道你的动画要持续多长时间或何时结束,所以它必须像这样执行动画。
PRFPRFPRFPRFPRFPRFPRFPRF
我的理论是,您遇到的延迟与这两个调用同时在主线程上发生冲突有关。除了使用更快的芯片之外,我不确定您将如何解决这个问题。我知道您可以将一个动画推送到 CPU,将一个动画推送到 GPU,但我在编程方面还没有那么先进。
关于iphone - UIScrollView 中的动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5659841/