1

我想用 Core Animation 自定义推送和弹出动画!例如,我在 pushViewController 中编写了一些代码,如下所示:

{
    //save currrent view's snapshot`

    m_curLayer = [self _ConstructLayerByView:self.view];

    [super pushViewController:viewController animated:NO];

    //save the next view's snapshot
    m_nextLayer = [self _ConstructLayerByView:self.view];

    //add these two new layers to self.view.layer, and add customized animations to them.
    [self _PushAnimation]; 
}

动画效果符合我的预期,但性能很差。经过一些分析,我发现 renderInContext 很慢。我的快照功能是:

+ (id)CaptureView:(UIView *)view
{

    UIGraphicsBeginImageContextWithOptions(view.frame.size, YES, [UIScreen mainScreen].scale);
    CGContextRef contenxt =  UIGraphicsGetCurrentContext();

    [view.layer renderInContext:contenxt];

    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return (id) [newImage CGImage];
}

所以想问问有没有办法优化renderInContext,或者有更好的自定义动画的方法?

4

1 回答 1

1

使用添加到 UIViewController 或子类 UINavigationController 的新“容器”功能编写您自己的导航控制器并覆盖所有推送和弹出方法。可能后者会正常工作 - 我出于其他原因将其子类化,而我的子类工作得很好。

许多人评论说,使用 ios5 中的新容器方法,现在可以重新创建大部分(如果不是全部)现有容器类。

于 2012-11-18T13:19:36.357 回答