是否有使用动画块执行此动画的替代方法?

Jak*_*oni 5 iphone animation objective-c ipad ios

我目前正在通过执行以下操作来执行卷曲动画:

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];
Run Code Online (Sandbox Code Playgroud)

此动画将简单地执行页面卷曲动画,但最终您会看到与开始时相同的视图。从未发生过真正的转变。

现在使用动画块我知道你可以做一些事情来达到以下效果:

[UIView transitionFromView:self.view
                    toView:aNewView    // a view to transition to
                  duration:1 
                   options:UIViewAnimationTransitionCurlUp|UIViewAnimationOptionCurveEaseIn
                completion:NULL];
Run Code Online (Sandbox Code Playgroud)

但是,使用动画块您正在过渡到一个新视图,aNewView这与上面的 CATransition 动画不同,后者重用相同的视图(从未发生真正的过渡)。动画块的问题在于您必须实际创建要转换的新视图,在我的情况下这很麻烦,因为视图相当复杂,我宁愿不创建 UIView 子类。

有没有办法使用动画块执行上述 CATransition 动画,同时解决必须重建视图或创建自定义子类的困难?

Jak*_*oni 3

好的 - 所以我为任何感兴趣的人找到了答案。其实非常简单。您可以简单地使用以下方法:transitionWithView:duration:options:animations:completion:

例如:

[UIView transitionWithView:self.view
                  duration:1
                   options:UIViewAnimationOptionTransitionCurlUp|UIViewAnimationCurveEaseIn
                animations:^{ // do anything you want here } 
                completion:NULL];
Run Code Online (Sandbox Code Playgroud)

就是这样。这将显示返回同一视图的过渡动画。您可以在动画块中对新视图进行任何所需的更改(可能显示一些新文本,无论如何......)。

我希望这可以帮助某人走出困境......