【问题标题】:Animations during pushing view controllers to nav. controller sometimes stop working将视图控制器推送到导航期间的动画。控制器有时会停止工作
【发布时间】:2012-04-25 20:49:41
【问题描述】:

我在我的应用程序中多次使用此标准代码将 VC 推送到导航。控制器。

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

但有时他们停止工作 - 视图控制器被正确推送但没有动画(就像我会使用“animated:NO”一样),我不知道为什么。

有什么建议可以观察或尝试吗?

【问题讨论】:

  • 有时它会停止工作意味着..??它会抛出一些错误或异常还是什么都不做??
  • App 运行良好(没有崩溃),只是在推送 VC 时动画消失了。
  • 也许你是从另一个线程/队列调用这个方法?比如webcallback、blocks等
  • 当 popViewControler 或 pushViewControler 被多次调用时,我看到了相同的行为。放置一个断点以确保您只调用该方法一次。
  • 确定你不是从另一个线程推送吗?你从哪里打电话给pushViewController:...

标签: iphone objective-c animation uinavigationcontroller pushviewcontroller


【解决方案1】:

每当您使用 ...animated:YES/NO 时,Cocoa 框架将确定它是否可以/不能执行此操作,并且通常会失败。就像迈克尔说的那样,你可能不在主线程上,也不知道是什么。如果您在 NSWindow 上查看用于全屏动画的最新 Lion API,您会发现动画失败的各种委托提供了详细信息。所以我不指望苹果会回归动画师并添加这样的功能。

为了回答您的问题,我主要会使用我自己的自定义动画,使用 Core Animations。他们真的没有那么糟糕。为了让您开始,您可以像这样创建一个类别或类方法来方便:

+ (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 进行包装)

【讨论】:

  • 你不应该自己写,因为已经有一个类可以为你做这件事。相反,您会发现问题并加以解决。
  • 如果您不需要对动画进行任何控制,我同意 aryaxt。
猜你喜欢
  • 2018-09-24
  • 2014-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多