0

接続されたグラフのノードを表示するアプリがあります。ユーザーがノードに触れると、対象のノードを含むサイズのノードの背後にあるclearColor「接続」ビューを表示して、隣接するノードへのパスを強調表示します。このビューには、各パスの子ビューが含まれ、これらの各パスビューには、ソースノードと各隣接ノードの背後に表示される単一の線を描画するdrawRectメソッドがあります。すべてが順調であり、このアプローチは、将来のパスで興味深いことを行う可能性を開きます。

ただし、最近、メインディスプレイがスクロールビュー内のズームインビューになり、外部ディスプレイにすべてのノードのグローバルビューが表示されるという考えで、外部ディスプレイを検出するコードを追加しました。外部ディスプレイに接続ビューを追加して、メインディスプレイでタッチして選択したものを表示するまでは、正常に機能しました。私のパスビュー(およびそれらの親ビューと祖父母ビュー)は、私が知る限り同一であり、setNeedsDisplayが呼び出された後、メインビューのいとこと同様にdrawRectメソッドが呼び出されることはありません。それらは両方とも同じ場所で同じ方法で初期化されます。

私は問題を切り分けるために何十(何百?)のことを試みましたが、問題を理解していません。汎用UIViewを接続ビューに追加すると、両方の場所に表示されますが、drawRectを追加してUIViewを拡張するパスビューは、メインディスプレイでのみ呼び出され、外部ディスプレイでは呼び出されません。

アイデアが足りなくなった。問題の原因が何であるかについて誰かが何か考えを持っていますか?

4

1 に答える 1

0

私はこれを理解しようとして髪を引っ張っていました。2つのビューの状態を比較しても、違いは見られませんでした。数日前、私はついにLLDBで実行するPythonルーチンを作成して、オブジェクトの状態をダンプし、2つのビューで差分をとることに決めました。彼らは同じサブビューを表示しようとしていたことがわかりました!

オブジェクトの作成を最小限に抑えるために、パスサブビューを配列に詰め込んで、必要以上に作成したり、使用していないときに非表示にしたりすることを避けていました。しかし、私はこの配列を@interfaceブロックの外で愚かに宣言し、誤ってグローバルにしたため、両方のビューが最後に定義されたサブビューのセットを使用していました。もちろん、ビューを複数の親ビューの子にすることはできません。宣言を適切な場所に移動すると、問題が修正されました。

ばかげたエラー!しかし、おそらくこれは、同様の問題を抱えている他の誰かのために何かをジョギングするでしょう。

于 2012-10-03T00:42:43.617 に答える