2009-10-22 59 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

謝謝,我會試試這個。 – 2009-10-23 17:31:18

+0

它會增加您必須執行的管理數量,但可以爲您提供所需的額外速度。 – jessecurry 2009-10-23 19:38:38

+0

我沒有時間去嘗試這個特定的代碼,但很明顯我需要自己完成所有的轉換(如你所建議的),而不是依賴於正常的行爲。 – 2009-10-26 17:07:49

0

您是否重複使用表格視圖中的單元格?確保真正重用它們,換句話說,在if(cell == nil)情況下執行單元的所有設置,並且僅在常見情況下應用數據(應用於重用和新創建的)。

請注意透明度可能會影響單元格的性能。通常看起來你必須讓事情變得透明,但也許你沒有,因爲UITableViewCell意識到了這些問題。關閉某些對象的透明度可能看起來不對,但值得嘗試查看它是否真的有效。滾動單元格的大部分成本是隨着單元格移動而合成的,而不是最初創建單元格的。

,可以幫助做您應用到您的提前,而不是將所有的意見到單元格的視圖的合成的另一件事,那麼你申請只有一個預製以你的細胞。

如果你實際上是在動畫滾動細胞的觀點,你可能需要重新考慮或至少使用一些簡化,使其在設備上徵稅少一點。

你也可以考慮採用Matt Gallagher's strategy for cell handling - 它會阻止你的cellForRowAtIndexPath變成一個冗長而討厭的ifs集合。

+0

我不認爲有一個在我的代碼中的性能問題 - 如果我擺脫了動畫的UI是一個很大的活潑,但很少像iPhone一樣。 問題在於,動畫運行需要一些時間。而不是運行0.5秒的動畫,我希望它在0.25秒內運行。 這是一個假的例子,使其更清晰。轉到日曆應用程序,然後按右箭頭以讓日曆轉到下個月。下個月將視覺上滑入視野。我的問題是,我將如何在下個月更快地滑入視圖。 – 2009-10-22 23:14:41

+1

我現在明白了 - 我確實看到這個: http://everburning.com/news/flicking-the-iphone/ 但是有一些手動工作要做。我不認爲你可以改變系統轉換的速度,比如由pushViewController:withAnimation引起的轉換速度,這將導致應用程序的批准。我知道通過訪問私有方法的一種方式,似乎停止與3.0的發佈工作。 – 2009-10-23 00:18:20