Iphone 是否有其他方法使用动画块执行此动画?

Iphone 是否有其他方法使用动画块执行此动画?,iphone,objective-c,ios,ipad,animation,Iphone,Objective C,Ios,Ipad,Animation,我目前正在通过执行以下操作执行卷曲动画: CATransition *animation = [CATransition animation]; animation.type = @"pageCurl"; animation.subtype = kCATransitionFromTop; animation.fillMode = kCAFillModeForwards; animation.duration = 1; animation.timingFunction = [CAMediaTimi

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

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
,这与上面重用相同视图的CATTransition动画不同(从未发生真正的转换)。动画块的问题是,您必须实际创建要转换到的新视图,这在我的例子中很麻烦,因为视图相当复杂,我不希望创建UIView子类


是否有一种方法可以使用动画块执行上述CATTransition动画,同时避免重建视图或创建自定义子类的困难?

好的-因此我为感兴趣的人找到了这个方法。其实非常简单。您只需使用以下方法:
transitionWithView:duration:options:animations:completion:

例如:

[UIView transitionWithView:self.view
                  duration:1
                   options:UIViewAnimationOptionTransitionCurlUp|UIViewAnimationCurveEaseIn
                animations:^{ // do anything you want here } 
                completion:NULL];
就这样。这将显示回同一视图的过渡动画。可以对动画块中的新视图进行任何更改(可能显示一些新文本,无论什么…)


我希望这能帮助其他人…

你能不能只做[UIView transitionFromView:self.view到view:self.view…?不,视图由于某种原因被删除,屏幕变黑了我想你可以试试[UIView transitionFromView:self.view到view:[self.view copy]…不幸的是UIView没有实现复制协议。不过这是个好主意。我希望它能正常工作。我想它可能不会,我真的无法很好地检查,所以我没有将其作为答案发布。