2012-04-13 14 views
3

私はUITableVieCellのbackgroundViewに割り当てられたUIViewサブクラスを持っています。私のUIViewサブクラスでは、initWithFrame:メソッドで2つのCALayersを追加しています。CALayerをUIViewに追加して向き変更を再描画する機能

向きが変わると、セルの高さが変わり、私のCALayersの位置を再調整する必要があります。基本的に再描画。

CALayersはinitWithFrame:メソッドに追加されているので、setNeedsDisplayを呼び出すことでそれらを再描画できません。

私はCALayersでの作業には新しく、これを行う正しい方法がわかりません。 CALayersを方向変更に再描画させる方法や、一般的に次元を変更する可能性のあるイベントを追加するにはどうすればよいですか?

答えて

3

UIViewサブクラスでは、- (void)layoutSubviews;メソッドを実装します。これは、ビューのジオメトリが変更されたときにフレームワークによって呼び出されます。レイヤーに適切な変更を加えることができます。

CoreAnimationでは、レイヤーをサブクラス化する場合、layoutSublayersメソッドもあります。

これが役に立ちます。

+0

私は 'drawRect:'をオーバーライドしてしまいましたが、まったく別のやり方でやりましたが、あなたのやり方を試してみました。助けてくれてありがとう、よく心に留めておいてください。 – KDaker

4

実際には、KVOを使用してビューレイヤの境界プロパティの変更を観察する方が簡単です。

[self.layer addObserver:self forKeyPath:@"bounds" options:0 context:nil]; 

-observeValueForKeyPath:ofObject:change:context:メソッドで必要な処理を行います。

完了したらremoveObserver:selfを忘れないようにしてください。

関連する問題