我在应用程序中多次使用此标准代码来将VC推送到导航。控制器。将视图控制器推送到导航期间的动画。控制器有时会停止工作
[self.navigationController pushViewController:detailController animated:YES];
但有时他们停止working-视图控制器推correcty但没有动画(就像我会用“动画:NO”),我不能找出原因。
任何建议什么观察或尝试?
我在应用程序中多次使用此标准代码来将VC推送到导航。控制器。将视图控制器推送到导航期间的动画。控制器有时会停止工作
[self.navigationController pushViewController:detailController animated:YES];
但有时他们停止working-视图控制器推correcty但没有动画(就像我会用“动画:NO”),我不能找出原因。
任何建议什么观察或尝试?
每当你使用...动画:是/否Cocoa框架将确定它是否可以做到这一点,更多的时候,它只是失败。就像迈克尔说的那样,你可能不在主线上,或者谁知道什么。如果您在NSWindow上查看最新Lion API的全屏动画,您会发现动画的各种代表均未提供详细信息。所以我不希望苹果回归动画师并添加这样的功能。
要回答你的问题,主要我会使用我自己的自定义动画使用核心动画。他们确实没那么糟糕。为了让您一开始,你可以创建一个方便类或类的方法是这样的:
+ (void) animateWithDuration:(NSTimeInterval)duration
animation:(void(^)())animationBlock
completion:(void(^)())completionBlock {
[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) {
if (duration > 0) [context setDuration:duration];
[context setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault]];
if (animationBlock) animationBlock();
} completionHandler:^ {
if (completionBlock) completionBlock();
}];
}
然后,您可以使用它像这样几个动画。像这样...
[AnimationContext animateWithDuration:myDuration animation:^{
// You can use whatever animation you want here or even nest
CABasicAnimation *fade = /* opacity animation */;
[view.layer addAnimation:fade forKey:nil];
} completion:^{
// Do some completion here.
}];
请注意,您可以通过这种方式更好地控制动画。
希望这回答你正在寻找什么。
(注巨大的,我的例子是针对Mac OS X在iOS上相当于NSAnimationContext是使用CATransaction包装)
有时它停止工作手段..?它会抛出一些错误或异常,或者它什么都不做? – 2012-04-13 13:45:56
应用程序正常工作(没有崩溃),只是推动VC时动画不见了。 – DixieFlatline 2012-04-13 13:48:38
也许你是从另一个线程/队列调用这个方法?像webcallback,块等 – 2012-04-13 13:53:52