2017-12-20 20 views
0

ビューのレイヤーに直接円を描くと、デバイスの回転は完璧に見えます。デバイスの回転中にCALayerのサブレイヤが正常に動作しない

描画はfunc draw(_ rect: CGRect)メソッドで行われます。

次に、サブレイヤで円を描き、それをinitメソッドのビューに追加しました。

func draw(_ rect: CGRect)メソッドでサブレイヤのフレームを更新します。

デバイスのローテーションが完了する前にサブレイヤが更新されているような気がします。 したがって、最初の画像は以下のとおりです。

この外観を少し改善するための簡単な修正は、サブビューレイヤーをクリップすることです。 この方法では、円はメインビュー(オレンジ色のビュー)にブリードしません。

これは主な問題を修正するものではありませんが、 サブレイヤを追加することでこの問題が発生する理由はわかりません。

また、スーパービューの描画メソッドでサブレイヤのコンテンツを描画します。オレンジ色の表示は、スーパービューが回転中

During rotation

enter image description here

注真ん中

で長方形のスーパービューであるされていない:私はすべてのためのコード例を追加しませんでした私が見た事例も同じ問題を抱えています。 他の方法は、ビューのサイズをハードコーディングすることでこれを解決します。したがって、回転によってビューのサイズが変更されることはありません。 また、ポートレートモードで表示をロックする傾向があります。

例のコードが必要な場合は簡単な例を作成できますが、

+0

layoutSubviewメソッドでレイヤーを描画しようとしましたか? – Ocunidee

+0

あなたは簡単な例を提供できますか? @ 3366784 –

+0

サンプルコードの素晴らしい記事が見つかりました。私の答えを見てください。 – 3366784

答えて

0

問題の解決策を見つけました。

他のみんなが同じ問題を抱えているようです。 これは、レイヤに制約がないためです。

アプリは通常ポートレートモードでロックされているため、本番アプリでは表示されません。 りんごのように見えますが、リンゴはコントロール用の画像を使いやすく、描画を避けます。 これは私が読んだRay Wenderlich articleによるものです。


解決策は基本的に(サブレ​​イヤの代わりに)サブビューを使用し、サブビューに組み込まれたレイヤを使用して描画することです。

この記事では、プロセスを説明します。ここではhttps://marcosantadev.com/calayer-auto-layout-swift/

はサブビューと副層と回転を示す画像です。 サブビューは、制約があるため正常に回転します。 enter image description here

関連する問題