UIImageViewオブジェクトのZ位置に何らかのZインデックスを設定する方法はありますか?
-
05-07-2019 - |
質問
画像のグリッドを構築し、上部から始めて、至る所にUIImageViewオブジェクトを作成します。今、私はそれらが少し重なり合うことを望みますが、最後に描いたものが一番上にあります。 z位置をプログラムで設定して、最初に描画するものが一番上に来るようにします。
解決
UIImageViewを使用したと言いました。 UIImageViewを使用して画像を描画すると、画像を初期化してからコンテナビューに追加することを意味します。
ループでこのコードを使用することはできませんか?
[containerView insertSubview:image atIndex:[[containerView subviews] count]]
結果は、最初に追加されたビューがビュースタックの一番上にあることです(ただし、まだテストできませんでした:))
他のヒント
insertSubiew を使用する代わりに、次を試すことができます。
- (void)bringSubviewToFront:(UIView *)view
- (void)sendSubviewToBack:(UIView *)view
https://stackoverflow.com/a/4631895/2482283
ビューのレイヤー(CALayerオブジェクト)のzPositionプロパティを使用して、ビューのz-indexを変更できます。
theView.layer.zPosition = 1;
Viktor Nordlingが追加したように、"大きな値が上にあります。負の値を含む、任意の値を使用できます。"デフォルト値は0です。
レイヤーにアクセスするには、QuartzCoreフレームワークをインポートする必要があります。このコード行を実装ファイルの先頭に追加するだけです。
#import "QuartzCore/QuartzCore.h"
別の方法( https://stackoverflow.com/a/4663526/2482283 )、uiviewsも利用できますメソッド:
@property(nonatomic,readonly) UIView *superview;
@property(nonatomic,readonly,copy) NSArray *subviews;
- (void)removeFromSuperview;
- (void)insertSubview:(UIView *)view atIndex:(NSInteger)index;
- (void)exchangeSubviewAtIndex:(NSInteger)index1 withSubviewAtIndex:(NSInteger)index2;
- (void)addSubview:(UIView *)view;
- (void)insertSubview:(UIView *)view belowSubview:(UIView *)siblingSubview;
- (void)insertSubview:(UIView *)view aboveSubview:(UIView *)siblingSubview;
- (void)bringSubviewToFront:(UIView *)view;
- (void)sendSubviewToBack:(UIView *)view;
直接ではありません。
1つの解決策は、UIViewsにz-indexプロパティを与えることです。深度レベルを定義する整数。次に、UIViewを含むNSArray(myArray)を使用して、サブビューとして深さ順に追加します。
同じ問題がありました。 Zインデックスが最高と最低のsubview要素が必要でした。私のテストでは、UIKitがサブビュープロパティ内の要素をz位置に従って配置していることがわかりました。取ったら
[self.scrollview subviews]
例えば。最初の配列要素は、一番後ろにあるサブビューです。最高のインデックスを持つ配列要素は、最前面のサブビューです。使用する場合
- (void)bringSubviewToFront:(UIView *)view
- (void)sendSubviewToBack:(UIView *)view`
subviews配列はそれに応じて並べ替えられます。
下/上のビューへの参照がある場合、サブビューを追加する必要があります。次を使用できます
[self.view insertSubview:<#(UIView *)#> belowSubview:<#(UIView *)#>];
[self.view insertSubview:<#(UIView *)#> aboveSubview:<#(UIView *)#>];
実際、私が知る限り、そのためのz-index位置プロパティはありません。ビューでの描画には、単純な描画モデルが使用されます。
UIImageViewとは異なり、CALayersには深さがあります(3D空間の2D投影であるため) 。 こちらをご覧ください。 参照用。
多くのUIImageViewオブジェクトの代わりに、CALayerを使用することを本当に検討する必要があります。 UIImageViewオブジェクトは優れていますが、集中描画の場合、CALayerの方が軽量で効率的です(ただし、ユーザーが画像を操作する必要がある場合は、ビューオブジェクトの方が優れています)。それは本当にあなたが何をしているかに依存します。 CALayersにはzPositionプロパティがあります。これは、ビュースタック内でUIViewの位置を調整するときにUIKitが使用するものです。
imageView.layer.zPosition = 100;