UIImageViewオブジェクトのZ位置に何らかのZインデックスを設定する方法はありますか?

StackOverflow https://stackoverflow.com/questions/826068

質問

画像のグリッドを構築し、上部から始めて、至る所に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;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top