有没有其他方法可以使用动画块来执行此动画?

时间:2012-02-22 02:11:54

标签: iphone objective-c ios ipad animation

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

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动画,同时解决了重建视图或创建自定义子类的困难?

1 个答案:

答案 0 :(得分:3)

好的 - 所以我想对任何有兴趣的人都知道了。它实际上非常简单。您只需使用以下方法:transitionWithView:duration:options:animations:completion:

例如:

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

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

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