2012-11-18 3 views
1

코어 애니메이션으로 푸시 앤 팝 애니메이션을 사용자 지정하고 싶습니다! 예를 들어, 다음과 같이 pushViewController에 코드를 작성합니다.UINavigationController 사용자 지정 성능 문제가있는 푸시/팝 애니메이션

{ 
    //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, 또는 애니메이션을 사용자 정의 할 수있는 더 좋은 방법을 최적화 할 수있는 방법이 있는지 물어보고 싶은?

답변

1

UIViewController에 새롭게 추가 된 '컨테이너'기능을 사용하여 사용자 고유의 내비게이션 컨트롤러를 코딩하거나 UINavigationController를 하위 클래스로 만들고 모든 push 및 pop 메서드를 재정의합니다. 아마 후자는 잘 동작 할 것입니다 - 다른 이유로 하위 클래스를 만들고 서브 클래스가 정상적으로 작동합니다.

많은 사람들이 ios5 컨테이너 메소드의 새로운 기능을 사용하여 기존 컨테이너 클래스의 전부는 아니더라도 대부분을 다시 만들 수 있다고 언급 한 사람들이 많습니다.

+0

실제로 UINavigationController를 하위 클래스로 지정하고 push/pop 메서드를 재정의합니다. 방금 성능 문제를 만났습니다. – leoncheng

관련 문제