2009-10-22 5 views
1

사용자가 네비게이션 컨트롤러의 서로 다른보기에 약 6 개의 정보를 입력하도록하는 데이터 입력 응용 프로그램이 있습니다. 이것은 잘 작동하지만 일단 사용자가 응용 프로그램에 익숙해지면 다음 화면이 표시되는 데 걸리는 시간에 따라 사용자 속도가 느려집니다.iPhone 애니메이션 속도 향상

애니메이션없이 응용 프로그램을 사용해 보았지만 제대로 느껴지지 않았습니다. 애니메이션을 더 빠르게 만들 수있는 방법이 있습니까? 주로 탐색 컨트롤러, 테이블 뷰 및 피커 뷰를 사용합니다.

답변

2

새로운보기를로드 할 때마다 패널티가 발생하므로 스크롤보기 또는 다른 레이아웃을 사용하여 화면을 통합하려고 할 수 있습니다. 또한 불필요한 그래픽을로드하는 경우이를 제거 할 수 있습니다.

여러분은 또한 각보기를 하위보기로 추가 할 수 있습니다.이 경우 다른 것들 중에서 애니메이션 기간을 제어 할 수 있습니다. 이 코드는 당신을 위해 그렇게 할 것입니다. 다만 제가 작성한 것과 테스트하지 않은 것 (전환 스타일과 부울 매개 변수는 지금 당장 아무것도하지 않기 때문에 제거 할 수 있습니다).

UIViewControllerExtendedPresentModalViewController.h

#import <Foundation/Foundation.h> 

typedef enum _ExtendedModalTransitionStyle 
{ 
    ExtendedModalTransitionStyleTopDown 
} ExtendedModalTransitionStyle; 

@interface UIViewController (ExtendedPresentModalViewController) 
- (void)presentModalViewController: (UIViewController*)modalViewController 
       withTransitionStyle: (ExtendedModalTransitionStyle)style 
          animated: (BOOL)animated; 

- (void)dismissModalViewController: (UIViewController*)modalViewController 
       withTransitionStyle: (ExtendedModalTransitionStyle)style 
          animated: (BOOL)animated; 
@end 

UIViewControllerExtendedPresentModalViewController.m 내 코드에서 성능 문제가 있다고 생각하지 않습니다

#import "UIViewControllerExtendedPresentModalViewController.h" 
#import <QuartzCore/QuartzCore.h> 

@implementation UIViewController (ExtendedPresentModalViewController) 

    - (void)presentModalViewController: (UIViewController*)modalViewController 
        withTransitionStyle: (ExtendedModalTransitionStyle)style 
           animated: (BOOL)animated 
    { 
     [modalViewController retain]; // we'll need this for a little while, hang on to it. 

     CATransition* transition = [CATransition animation]; 
     [transition setDuration: 0.4]; 
     [transition setTimingFunction: 
     [CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionLinear]]; 
     [transition setType: kCATransitionMoveIn]; 
     [transition setSubtype: kCATransitionFromBottom]; 
     [[[self view] layer] addAnimation: transition 
            forKey: nil]; 
     [[self view] addSubview: [modalViewController view]]; 
    } 

    - (void)dismissModalViewController: (UIViewController*)modalViewController 
        withTransitionStyle: (ExtendedModalTransitionStyle)style 
           animated: (BOOL)animated 
    { 
     CATransition* transition = [CATransition animation]; 
     [transition setDuration: 0.4]; 
     [transition setTimingFunction: 
     [CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionLinear]];//kCAMediaTimingFunctionEaseInEaseOut]]; 
     [transition setType: kCATransitionReveal]; 
     [transition setSubtype: kCATransitionFromTop]; 
     [[[[modalViewController view] superview] layer] addAnimation: transition 
                   forKey: nil]; 
     [[modalViewController view] removeFromSuperview]; 

     [modalViewController release]; // all done, we can let this go. 
    } 
    @end 
+0

감사합니다. –

+0

당신이해야 할 관리의 양은 늘어날 것이지만, 당신에게 필요한 여분의 속도를 줄 수 있습니다. – jessecurry

+0

이 특정 코드를 시도 할 시간이 없었지만 정상적인 동작에 의존하는 대신 모든 전환을 직접 수행해야합니다. –

0

테이블보기에서 셀을 재사용 하시겠습니까? 정말로 재사용하는지 확인하십시오. 즉, if (cell == nil) 경우 내부의 모든 셀 설정을 수행하고 일반 경우에만 데이터를 적용합니다 (재사용 및 새로 생성 된 둘 모두에 적용).

투명도가 셀에서 가질 수있는 성능에 유의하십시오. UITableViewCell이 문제를 인식하고 있기 때문에 일을 투명하게 만들어야하는 경우가 많지만 그렇지 않은 경우가 많습니다. 일부 개체에서 투명도를 끄는 것은 잘못된 것처럼 보일 수 있지만 실제로 작동하는지 확인해 보는 것이 좋습니다. 셀을 스크롤하는 비용의 대부분은 처음에는 셀을 만들지 않고 셀이 움직일 때의 합성입니다.

또 다른 도움이 될 수있는 것은 셀에 모든 뷰를 추가하는 대신 미리 셀에 적용한 뷰 합성을 수행 한 다음 셀에 하나의 미리보기 만 적용하는 것입니다.

실제로 스크롤하는 셀의 뷰에 애니메이션을 적용하려면 해당 요소를 다시 생각해 보거나 적어도 장치에 부담을 덜주기 위해 단순화를 사용해야합니다.

또한 Matt Gallagher's strategy for cell handling을 채택하는 것이 좋습니다. 그러면 cellForRowAtIndexPath가 길고 끔찍한 ifs 중 하나로 전환됩니다.

+0

- 나는 애니메이션을 제거하면 UI가 훨씬 더 기분은 좋지만 아이폰과 비슷합니다. 문제는 애니메이션을 실행하는 데 시간이 걸리는 것입니다. 실행하는 데 0.5 초가 걸린 애니메이션 대신 0.25 초 만에 실행하고 싶습니다. 가짜 예를 들어 명확하게 설명합니다. 캘린더 응용 프로그램으로 이동하여 오른쪽 화살표를 누르면 다음 달로 이동합니다. 다음 달은 시각적으로 미끄러 져 들어갑니다. 제 질문은 어떻게하면 다음 달을 더 빨리 볼 수있게 할 수 있을까요? –

+1

나는 지금 그것을 얻는다 - 잘 나는 이것을 보았다 : http://everburning.com/news/flicking-the-iphone/ 그러나 할 약간의 수작업이있다.나는 pushViewController : withAnimation에 의한 시스템 전환 속도를 앱 승인으로 이어질 수있는 방식으로 변경할 수 있다고 생각하지 않습니다. 3.0 릴리스로 작업을 중단 한 것 같은 개인적인 방법에 액세스하여 한 가지 방법을 알고 있습니다. –