2016-08-08 12 views
1

私は、自分自身にCAShapeLayersを使って画像を描画するUIViewのサブクラスを持っています。 UIViewがAutoLayoutによって与えられたどのようなサイズにも図面を適応させたい。私はそれに.bounds.sizeから現在のサイズを取得し、フィットするように画像を描画する関数drawGraph()を与えました。いつUIViewはどれくらいの大きさを知っていますか?

コンテナUIViewControllerのviewDidLoad()で私の描画関数を呼び出すことから始めましたが、その時点でレイアウトはまだ発生していないので、ストーリーボードにはどんな境界もあります。

ビューコントローラのviewDidLayoutSubviews()から呼び出してみましたが、それでも問題はありません。それは、ストーリーボードからの境界線で最初に、次に更新された(正しい)境界線で再度呼び出されます。その間に一時停止があり、描画と再描画がユーザーに表示されます。

UIViewのレイアウト制約が適用され、正確な寸法を与える準備ができているかどうかを確認するにはどうすればよいですか?

+0

'viewWillAppear'メソッドでこれを試しましたか? –

答えて

1

UIViewdrawRect(rect: CGRect)に描画する必要があります。ビューを画面に描画する必要があると、この関数が呼び出されます。

1

私のサブクラスでは、通常、レイアウトに関連するコードはlayoutSubview()メソッドをオーバーライドして行います。私が正しく覚えていれば、それはdrawRect(rect: CGRect)よりも軽量です。

実際に描画をしているのであれば、おそらくdrawRect(rect: CGRect)でそれを行うべきです。これは、新しいUIViewサブクラスを作成するときにXcodeが示唆するものです。

関連する問題