1

我在应用程序中多次使用此标准代码来将VC推送到导航。控制器。将视图控制器推送到导航期间的动画。控制器有时会停止工作

[self.navigationController pushViewController:detailController animated:YES]; 

但有时他们停止working-视图控制器推correcty但没有动画(就像我会用“动画:NO”),我不能找出原因。

任何建议什么观察或尝试?

+0

有时它停止工作手段..?它会抛出一些错误或异常,或者它什么都不做? – 2012-04-13 13:45:56

+0

应用程序正常工作(没有崩溃),只是推动VC时动画不见了。 – DixieFlatline 2012-04-13 13:48:38

+0

也许你是从另一个线程/队列调用这个方法?像webcallback,块等 – 2012-04-13 13:53:52

回答

0

每当你使用...动画:是/否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包装)

+1

当你已经有一门课为你做这个课时,你不应该自己写。相反,你会发现问题并修复它。 – aryaxt 2012-04-13 18:18:42

+0

我同意aryaxt,如果你不需要任何控制动画。 – Arvin 2012-04-13 18:25:20

相关问题