私は画像のグリッドを構築しています。一番上から始めて、あらゆる場所に UIImageView オブジェクトを作成します。少し重なるようにしたいのですが、最後に描いたものが一番上にあります。最初に描画するものが一番上になるように、プログラムで z 位置を設定したいと思います。
9 に答える
insertSubiewを使用する代わりに、次を試す ことができます。
- (void)bringSubviewToFront:(UIView *)view
- (void)sendSubviewToBack:(UIView *)view
直接ではありません。
1つの解決策は、UIViewにz-indexプロパティを与えることです。深度レベルを定義する整数。次に、UIViewを含むNSArray(myArray)を調べて、深さの順にサブビューとして追加します。
私も同じ問題を抱えていました。最高と最低の z-index を持つサブビュー要素が必要でした。私のテストから、UIKit は z 位置に従って subviews-propy 内の要素を配置することがわかりました。たとえば
[self.scrollview subviews]
、最初の配列要素は、一番後ろにあるサブビューです。最大のインデックスを持つ配列要素は、一番前のサブビューです。使用する場合
- (void)bringSubviewToFront:(UIView *)view
- (void)sendSubviewToBack:(UIView *)view`
サブビュー配列はそれに応じて並べ替えられます。
下/上のビューへの参照がある場合は、サブビューを追加する必要があります。次を使用できます
[self.view insertSubview:<#(UIView *)#> belowSubview:<#(UIView *)#>];
[self.view insertSubview:<#(UIView *)#> aboveSubview:<#(UIView *)#>];
実際、私の知る限り、そのための z-index 位置プロパティはありません。ビューでの描画は、単純な描画モデルを使用します。
UIImageView とは異なり、CALayers には奥行きがある (3D 空間の 2D 投影である) ため、ロジックを描画ループに入れる (つまり、必要なものを最後に描画する) か、Cocoa アニメーションを使用することができます。参考までにこちらをご覧ください。
imageView.layer.zPosition = 100;
多くの UIImageView オブジェクトの代わりに CALayer を使用することを検討することをお勧めします。UIImageView オブジェクトは優れていますが、激しい描画には CALayer の方が軽量で効率的です (ただし、ユーザーが画像を操作する必要がある場合は、ビュー オブジェクトの方が適しています)。それは本当にあなたが何をしているかに依存します。CALayers には zPosition プロパティがあります。これは、UIKit がビュー スタック内の UIView の位置を調整するときに使用するものです。