2

サブビュー(画像、テキストなど)を含むNSViewを作成し、myView.layer.transform=myTransformを使用して3D変換を適用したいと思います。

ドキュメントを読んだ後、これが許可されているかどうかについて混乱しています。レイヤーバックビューの場合、レイヤーを直接操作することは想定されていないため、変換の設定は間違っているようです。

それがレイヤーホスティングビューである場合、私はサブビューを持っているはずがありません。

layer.transformを設定する場合、CALayerを使用してすべての図面を設定し、サブビューの使用を停止する必要があるということですか?

4

1 に答える 1

2

サブビューがネストされたNSView、NSScrollViewsにCALayerアニメーションを設定しただけで、問題なく動作します。重ね合わせたビューに制限があると思います。(後者の問題は、描画順序が指定されていないことです。どのビューが上に表示されるかは予測できません。)

ただし、サブビューにも変換を適用する場合は、サブビューのレイヤーを個別に設定する必要があります。または、はい、サブビューをダンプして、すべてを単一のビューのCALayersに配置することもできます。境界と位置のプロパティを使用して、サイズと配置を制御できます。(アンカーポイントを変更しない限り、位置は左下ではなく中央からであることに注意してください。)

レイヤーホスティングを行っている場合は、変換をルートレイヤー(view.layer)に適用しないでください。代わりに、新しいCALayerを作成し、それにコンテンツを追加し、それに変換を追加して、それをサブレイヤーとしてルートレイヤーに適用します。ルートレイヤーを直接操作することは避けてください。

レイヤーホスティング設定のクイックサンプル:

// Set up the root layer.
[[self.aViewController view] setLayer:[CALayer layer]];
[[self.aViewController view] setWantsLayer:YES];
// Set up a sublayer.
CALayer *sublayer = [CALayer layer];
[self.aViewController.view.layer addSublayer:sublayer];
// Repeat if you need additional sublayers. There's a name property if you need to distinguish between them.
于 2011-05-13T23:25:44.890 に答える