ナビゲーションコントローラーのさまざまなビューでユーザーに約6つの情報をすべて入力させるデータ入力アプリケーションがあります。これは正常に機能しますが、ユーザーがアプリケーションに慣れると、次の画面が表示されるまでにかかる時間が遅くなります。
アニメーションなしでアプリケーションを試してみましたが、なかなかうまくいきません。アニメーションをより速く発生させる方法はありますか?私は主にナビゲーションコントローラー、テーブルビュー、およびピッカービューを使用しています。
ナビゲーションコントローラーのさまざまなビューでユーザーに約6つの情報をすべて入力させるデータ入力アプリケーションがあります。これは正常に機能しますが、ユーザーがアプリケーションに慣れると、次の画面が表示されるまでにかかる時間が遅くなります。
アニメーションなしでアプリケーションを試してみましたが、なかなかうまくいきません。アニメーションをより速く発生させる方法はありますか?私は主にナビゲーションコントローラー、テーブルビュー、およびピッカービューを使用しています。
新しいビューをロードするたびにペナルティが発生します。スクロールビューまたは別のレイアウトを使用して画面を統合しようとする可能性があります。また、不要なグラフィックをロードしている場合は、それらを削除することをお勧めします。
各ビューを自分でサブビューとして追加することもできます。その場合、特にアニメーションの長さを制御できます。このコードはあなたのためにそれを行いますが、私が書いたばかりでテストしなかったので注意してください(遷移スタイルとブールパラメーターは現在何もしないので削除できます)。
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が問題を認識しているため、そうでない場合もあります。一部のオブジェクトで透明度をオフにするのは間違っているように見えるかもしれませんが、実際に機能するかどうかを確認する価値があります。セルをスクロールするコストの大部分は、セルが移動するときに合成することであり、最初にセルを作成することではありません。
セルにすべてのビューを追加するのではなく、事前にセルに適用するビューの合成を行ってから、作成済みのビューを1つだけセルに適用することも役立ちます。
スクロールセルで実際にビューをアニメーション化している場合は、それを再考するか、少なくともデバイスへの負担を少し軽減するためにいくつかの簡略化を使用する必要があります。
また、セル処理にMatt Gallagherの戦略を採用することを検討することもできます。これにより、cellForRowAtIndexPathが1つの長くて厄介なifのセットに変わるのを防ぎます。