2

私はしばらくの間、クロスワード アプリに取り組んできました。実際のゲームは UIScrollview で実行されます。これは、プレーヤーがスクロール、ズーム、およびパンできる必要があるためです。

UIScrollview に、タッチ イベントを処理する UITapGestureRecognizer を追加し、プレーヤーがどこに触れたかを計算します。ここまでは順調ですね。

その後、約 400 個の UILabel を UIScrollview に追加しました。プレーヤーがキーボードのボタンを押すまで、それぞれは「空」です。私の問題は、これらのラベルを追加すると、UIScrollview 全体が非常に遅くなり、スクロールなどでラグが発生することです。

ユーザーが正しい単語を推測すると、緑色のタイルが表示されます。タイルは UIImageViews として読み込まれます。これにより、パフォーマンスが再び低下します。

私はDTGridViewを見てきましたが、うまくいきません。

私を助けて、正しい方向に導いてくれませんか?

4

3 に答える 3

1

400 UILabel を追加する代わりに、UIScrollview メソッド drawRect を実装する必要があると思います

「ラベル」と呼ばれる 400 個のオブジェクトを含む NSArray を設定できます。

ユーザーがボタンを押したとき、「ラベル」の位置とテストを計算し、現在のオフセットでスクロールビューに表示する「ラベル」を決定する必要があります。

1 つの UIScrollview に 400 個の UILabels を追加すると、メモリの問題が発生する可能性があります。

于 2012-04-18T02:36:06.887 に答える
0

スクロールビューでリサイクル ラベルを使用する必要があります。これにより、パフォーマンスが向上します。UIScrollView でサブビューを再利用/リサイクルする方法を知るには、UIScrollView の Apple WWDC ビデオを確認してください。WWDC 2010 サンプル コード. UIScrollView クラス リファレンスも確認してください UIScrollViewクラス リファレンス

このリンクからヘルプを得ることができます。Creating Circular and Infinite UIScrollViews

于 2012-04-18T06:29:40.680 に答える
0

私は過去にこれで遊んでいます。関連するさまざまな回答を使用します。しかし、最終的には、計測器と少しのコメントを使用して、何が遅いかを確認しました。

サブビューを追加するとレイアウトサブビューが遅くなると誰かが言ったことを覚えているので、そこから「ローカル」コー​​ドを取り出しました。しかし、何も加速しませんでした。

そのため、addSubview ルーチンでブレークポイントを使用すると、viewDidLoad 中に iOS システムが実際にスーパービューのレイアウト呼び出し (navigationCtrlr) にあることに気付きました。

サブビューとバムを追加する前に 0.1 秒の遅延を導入しました! 競合状態によるクラッシュを防ぐために、dispatch_async をお勧めしますが、それは別の問題です。

要するに、自分がそこにいるとは思わなくても、LayoutSubviews にある可能性があります。

于 2016-08-09T01:18:59.827 に答える