2012-04-25 24 views
0

をしながら私のアプリは、私が拡大し、ピンチジェスチャーを認識しながらのUITableViewをリロードしてるのiOS 5にその中ピンチジェスチャー認識

をiPhoneアプリをやって非常に遅いです。

これはシミュレータでうまく動作します。しかし、デバイスでは非常に遅く動作します。たとえば、UIGestureRecognizerStateEndedの後のデバイスでは、すべての行のみが展開されますが、シミュレータでは、UIGestureRecognizerStateChangedが実行されている間に行が展開および再ロードされています。

メモリの問題についてのご意見はありますか?

私のコードは、問題がどこにあるかを最適化するために何を、あなたが測定する必要がありますを把握しようとする前に、ここで

if (pinchRecognizer.state == UIGestureRecognizerStateBegan) { 

    self.initialPinchHeight = rowHeight; 

    [self updateForPinchScale:pinchRecognizer.scale]; 
} 
else { 
    if (pinchRecognizer.state == UIGestureRecognizerStateChanged) { 
     [self updateForPinchScale:pinchRecognizer.scale]; 

    } 
    else if ((pinchRecognizer.state == UIGestureRecognizerStateCancelled) || (pinchRecognizer.state == UIGestureRecognizerStateEnded)) { 
    } 
} 

-(void)updateForPinchScale:(CGFloat)scale{ 

CGFloat newHeight = round(MAX(self.initialPinchHeight * scale, DEFAULT_ROW_HEIGHT)); 

rowHeight = round(MIN(30.0, newHeight)); 
/* 
Switch off animations during the row height resize, otherwise there is a lag before the user's action is seen. 
*/ 
BOOL animationsEnabled = [UIView areAnimationsEnabled]; 
[UIView setAnimationsEnabled:NO]; 
[self.tableView beginUpdates]; 
NSArray *visibleRows = [self.tableView indexPathsForVisibleRows]; 
[self.tableView reloadRowsAtIndexPaths:visibleRows withRowAnimation:UITableViewRowAnimationNone]; 
[self.tableView endUpdates]; 
[UIView setAnimationsEnabled:animationsEnabled]; 
} 

答えて

0

です。これを行うには、時間プロファイルおよびコアアニメーションの計測器を使用します。 Xcodeの「Product」メニューを使用し、「Profile」を選択します。あなたが気づいたように、シミュレータとは異なるパフォーマンス特性を持っている、デバイスに接続している間にプロファイルを作成してください。

タイムプロファイル計測器は、CPUで行われた作業を識別するのに役立ちます。 Core Animationの楽器は、CPUとGPUの両方でCore Animationが行っている作業を識別するのに役立ちます。 Core Animation instrument'sデバッグオプションのチェックボックスに注意してください。これらは少しわかりにくいですが、Core Animationに多くの作業をさせるUIの部分を視覚的に特定するのに役立ちます。

iOSで利用できるさまざまな計測器に関するドキュメントはhereです。

Core AnimationをカバーするWWDC videoもお勧めします。

+0

お返事ありがとうございました。私のコードでは、間違いが1回ありました。間違いは、beginupdateとendupdatesの間に行をリロードすることです。修正後、私のアプリは私のiPhone上で正常に動作しています。 – Jirune