我有一個數據錄入應用程序,讓用戶在導航控制器的不同視圖中輸入約6條信息。這可以正常工作,但一旦用戶習慣了應用程序,下一個屏幕出現所需的時間就會減慢用戶的速度。加速iPhone動畫
我嘗試了沒有動畫的應用程序,但它感覺不太對。有沒有辦法讓動畫更快發生?我主要使用導航控制器,表格視圖和選取器視圖。
我有一個數據錄入應用程序,讓用戶在導航控制器的不同視圖中輸入約6條信息。這可以正常工作,但一旦用戶習慣了應用程序,下一個屏幕出現所需的時間就會減慢用戶的速度。加速iPhone動畫
我嘗試了沒有動畫的應用程序,但它感覺不太對。有沒有辦法讓動畫更快發生?我主要使用導航控制器,表格視圖和選取器視圖。
還有的將是一個點球每次加載一個新視圖的時候,你可以嘗試使用整合滾動視圖或不同的佈局屏幕。 另外,如果你正在加載任何不必要的圖形,你可能想刪除它們。
你也可以添加每個視圖作爲一個子視圖自己在這種情況下,你有過除其他事項外動畫時長控制。這段代碼會爲你做,但要小心,因爲我只寫了它,並沒有測試它(過渡樣式和布爾參數可以被刪除,因爲它們現在什麼都不做)。
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
您是否重複使用表格視圖中的單元格?確保真正重用它們,換句話說,在if(cell == nil)情況下執行單元的所有設置,並且僅在常見情況下應用數據(應用於重用和新創建的)。
請注意透明度可能會影響單元格的性能。通常看起來你必須讓事情變得透明,但也許你沒有,因爲UITableViewCell意識到了這些問題。關閉某些對象的透明度可能看起來不對,但值得嘗試查看它是否真的有效。滾動單元格的大部分成本是隨着單元格移動而合成的,而不是最初創建單元格的。
,可以幫助做您應用到您的提前,而不是將所有的意見到單元格的視圖的合成的另一件事,那麼你申請只有一個預製以你的細胞。
如果你實際上是在動畫滾動細胞的觀點,你可能需要重新考慮或至少使用一些簡化,使其在設備上徵稅少一點。
你也可以考慮採用Matt Gallagher's strategy for cell handling - 它會阻止你的cellForRowAtIndexPath變成一個冗長而討厭的ifs集合。
我不認爲有一個在我的代碼中的性能問題 - 如果我擺脫了動畫的UI是一個很大的活潑,但很少像iPhone一樣。 問題在於,動畫運行需要一些時間。而不是運行0.5秒的動畫,我希望它在0.25秒內運行。 這是一個假的例子,使其更清晰。轉到日曆應用程序,然後按右箭頭以讓日曆轉到下個月。下個月將視覺上滑入視野。我的問題是,我將如何在下個月更快地滑入視圖。 – 2009-10-22 23:14:41
我現在明白了 - 我確實看到這個: http://everburning.com/news/flicking-the-iphone/ 但是有一些手動工作要做。我不認爲你可以改變系統轉換的速度,比如由pushViewController:withAnimation引起的轉換速度,這將導致應用程序的批准。我知道通過訪問私有方法的一種方式,似乎停止與3.0的發佈工作。 – 2009-10-23 00:18:20
謝謝,我會試試這個。 – 2009-10-23 17:31:18
它會增加您必須執行的管理數量,但可以爲您提供所需的額外速度。 – jessecurry 2009-10-23 19:38:38
我沒有時間去嘗試這個特定的代碼,但很明顯我需要自己完成所有的轉換(如你所建議的),而不是依賴於正常的行爲。 – 2009-10-26 17:07:49