这个动画是否有其他使用动画块的替代方法?

5

我目前正在执行一个curl up动画,具体步骤如下:

CATransition *animation = [CATransition animation];
animation.type = @"pageCurl";
animation.subtype = kCATransitionFromTop;
animation.fillMode = kCAFillModeForwards;
animation.duration = 1;
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
[[self.view.window layer] addAnimation:animation forKey:nil];

这个动画只是执行一个页面翻页的动画,但最终你所看到的视图与开始时相同。没有真正的过渡发生。

现在使用动画块,您可以做出类似以下效果的操作:

[UIView transitionFromView:self.view
                    toView:aNewView    // a view to transition to
                  duration:1 
                   options:UIViewAnimationTransitionCurlUp|UIViewAnimationOptionCurveEaseIn
                completion:NULL];

然而,当您使用动画块进行转换到一个新视图 aNewView 时,与上面重用相同视图的CATransition动画不同(没有真正的过渡发生)。 动画块的问题在于,您必须实际创建要过渡到的新视图,这在我的情况下很麻烦,因为该视图相当复杂,我宁愿不创建UIView子类。
有没有一种方法可以使用动画块执行上述CATransition动画,同时避免重建视图或创建自定义子类的困难?

你不能只是这样做吗 [UIView transitionFromView:self.view toView:self.view...? - Letrstotheprez
不行。视图因某些原因被移除,屏幕变黑。 - Joey J
我认为你可以尝试使用[UIView transitionFromView:self.view toView:[self.view copy]... - Letrstotheprez
很遗憾,UIView没有实现复制协议。不过这是个好主意。我希望它能够工作。 - Joey J
我觉得可能不会,我当时并没有很好地核实,所以没有将其发布为答案。 - Letrstotheprez
1个回答

3

好的 - 所以我已经弄清楚了,对于任何有兴趣的人来说。这实际上非常简单。您只需使用以下方法:transitionWithView:duration:options:animations:completion:

例如:

[UIView transitionWithView:self.view
                  duration:1
                   options:UIViewAnimationOptionTransitionCurlUp|UIViewAnimationCurveEaseIn
                animations:^{ // do anything you want here } 
                completion:NULL];

就是这样,这将显示一个转换动画回到相同的视图。您可以在动画块中进行任何想要的更改(也许显示一些新文本,等等...)。

我希望这可以帮助以后的某个人...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接