23

私の質問は、明確な回答が得られなかったときにclipToBounds = NOの場合、外側の境界を描画していないというものと非常によく似ています。

基本的に私はUIViewを持っていて、その中心から画面の端まで線を引きたいと思っています。これらのポイントがどこにあるかを計算するのは簡単です[self convertPoint:(CGPoint){0,0} fromView:[self superview]];(これは、ビューのスーパービューに関して原点を見つけます。しかし、ビューの drawRect: から線を引くと、ビューの境界で切り取られます。

ビューの境界の外に描画する方法はありますか? clipsToBounds プロパティを変更してみましたが、効果がないようです。

複数のビューでこれを行う必要があり、一部が他のビューの前にあるため、スーパービューから線を引くことができません...スーパービューの drawRect からレイヤーを理解するのは悪い考えのようです。

同様に、ビューの境界をサイズ変更して画面全体を含めることはできないと思います。これは、ビューを動的にサイズ変更する必要があるためです...これが機能するには、境界が巨大 (> 20,000 ポイントの正方形) である必要があります。 .

4

1 に答える 1

10

ビューの境界の外に描画することはお勧めしません。図面を含めるためにビューのサイズを自動的に変更する必要があるか、透明なオーバーラップ ビューが必要です。または両方。これらのケースのいずれにも当てはまらない状況は考えられませんが、想像力が不足している可能性があります。=)

現在起こっている可能性が高いのは、スーパー ビューが再描画されると、再描画が必要であることをスーパー ビューに伝え、その結果、外部で行っている描画が消去されることです。しばらく経ちましたが、私が間違っている場合は、より知識のある人なら誰でもここで修正できます (すべきです!)。

「Quartz Debug」(標準の Apple Developer Tools インストールから) がシミュレーターで機能するかどうかはわかりません /Developer/Applications/Performance Tools/Quartz Debugが、試してみる価値はあります。いつ、どのくらいの頻度で再描画が行われるかを表示するモードがあり、境界線とリフレッシュのオプションの遅延があります。

求めていることはできますが、サブビューの境界の外に出るたびにサブビューを強制的に再描画する必要があります。つまり、スーパービューは描画関数内で子を手動で描画する必要があります。基本的に、アップルの描画パラダイムを捨てて、サブビューをメインビューの描画拡張のように振る舞わせるだけです。

さらに、範囲が非常に動的である場合は、ポイントではなく画面またはスーパービューのパーセンテージで描画することを検討する必要がある場合、コーディングする方が理にかなっている場合があります。

于 2010-11-29T04:52:24.877 に答える