1

私が取り組んでいるアプリの一部には、iOSメッセージアプリのインターフェースに似たものにしようとしているメッセージングインターフェースが含まれています。新しいメッセージが送受信されたら、テーブルビューを下にスクロールして挿入アニメーションを表示したいと思います。

これまでのところ、私は基本的にこれを行いました:

- (void)didReceiveNewMessage:(...) {
    [messages addObject:...];                            // add the new message to an array
    NSIndexPath *newIndexPath = [NSIndexPath ...];       // find out where the new cell goes
    [tableView insertRowAtIndexPath:newIndexPath ...];   // animate the insertion of the new message
    [tableView scrollToRowAtIndexPath:newIndexPath ...]; // do the scrolling
}

これは、メッセージの着信が遅い場合に機能します。ただし、大量のメッセージをすばやく送信すると、テーブルビューが「混乱する」ことに気付きました。

たとえば、メッセージ1、2、3、4、5、6をすばやく送信すると、テーブルビューは、1、2、3、および4の挿入をアニメーション化し、スクロールを停止します。実際にテーブルビューを手動で下にスクロールすると、以下の5と6が表示されます。これを行うためのより良い方法を知っている人はいますか?

setContentOffset:テーブルビューをスクロールしようとしましたが、これは同じ効果がありました。

4

1 に答える 1

-1

ここでの根本的な問題は、プロパティが変更されるとフレームがAppleのドキュメントによると「未定義」になるCGAffineTransformMakeTranslationことを忘れたため、新しいフレームを手動で計算する代わりに怠惰で使用したことです。transform

たくさんのメッセージが届くまでは問題なく動作し、その時点でテーブルビューのフレームがめちゃくちゃになり、何らかの形でオフセットされて、テーブルビューの下部が本来よりもわずかに低く表示されていました。

教訓:フレームの計算と変換を1つのアニメーションに混在させないでください。すべてをフレームの観点から保持するか、すべてを変換の観点から保持してcenter+を使用しますbounds

于 2012-07-19T23:56:05.497 に答える