programing

iPhone UIView z 인덱스를 설정하는 방법

golfzon 2023. 4. 19. 23:45
반응형

iPhone UIView z 인덱스를 설정하는 방법

하나의 뷰를 다른 뷰 위로 이동하려면 뷰의 z 인덱스를 어떻게 알 수 있으며 어떻게 위로 이동해야 합니까?

.zPosition)CALayerobjectobject)의 z 합니다.

theView.layer.zPosition = 1;

Victor Nordling은 다음과 같이 덧붙였습니다.큰 가치는 최고입니다.음수 값을 포함하여 원하는 값을 사용할 수 있습니다."기본값은 0 입니다.

계층에 액세스하려면 QuartzCore 프레임워크를 가져와야 합니다.구현 파일의 맨 위에 이 코드 줄을 추가하십시오.

#import "QuartzCore/QuartzCore.h"

UIView형제자매는 슈퍼뷰에 추가된 순서대로 쌓입니다.UIView보기 순서를 관리하기 위한 계층 메서드와 속성이 있습니다.UIViewh:

@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;

.subviews어레이. 따라서 맨 위 뷰는 다음과 같습니다.

[parentView.subviews lastObject];

아래 그림은 다음과 같습니다.

[parentView.subviews objectAtIndex:0];

크레윈켈이 [parentView bringSubviewToFront:view]뷰가 맨 위에 표시되지만 이는 뷰가 계층 내의 모든 형제일 경우에만 해당됩니다.

IB 및 Swift

노란색이 슈퍼뷰이고 빨간색, 녹색 및 파란색이 노란색의 형제 서브뷰인 흐름 레이아웃을 고려할 때,

뷰 - 맨 위의 빨간색 뷰

목표는 서브뷰(녹색 등)를 맨 위로 이동하는 것입니다.

뷰 - 맨 위의 녹색 뷰

Interface Builder(인터페이스 빌더

인터페이스 작성기에서 맨 위에 표시할 보기를 문서 개요의 목록 맨 아래로 끌기만 하면 됩니다.

Interface Builder 뷰 순서

또는 뷰를 선택하고 메뉴에서 Editor > Array > Send to Front 순으로 이동할 수 있습니다.

인스위프트

프로그래밍 방식으로 이를 수행하는 방법에는 몇 가지가 있습니다.

방법 1

yellowView.bringSubviewToFront(greenView)
  • 이 방법은 위의 IB 답변과 동일한 프로그래밍 방식입니다.

  • 하위 보기가 서로 형제일 경우에만 작동합니다.

  • 은 브브뷰배 an an an an an an an an an an 에 포함되어 있습니다.yellowView.subviews 여기.bringSubviewToFrontgreenView0로로 합니다.2은 '하다'를 알 수 있습니다.

      print(yellowView.subviews.indexOf(greenView))
    

방법 2

greenView.layer.zPosition = 1
  • 이 방법은 레이어의 3D 위치를 z축에서 더 높은 위치(사용자에게 더 가까이)로 이동합니다.는 「」이기 에,0다른 모든 견해에 대해, 그 결과는greenView★★★★★★★★★★★★★★★★★★★★★★★★★★ 지표에 있다.0yellowView.subviews그러나 탭 이벤트와 같은 것은 여전히 가장 높은 인덱스 번호를 가진 보기로 먼저 이동하기 때문에 예기치 않은 결과가 발생할 수 있습니다.따라서 위의 방법 1을 사용하는 것이 좋을 수 있습니다.
  • zPosition로 설정될 수 있다CGFloat.greatestFiniteMagnitude(CGFloat(FLT_MAX)Swift의 이전 버전)에서 최상위 버전임을 확인합니다.
[parentView bringSubviewToFront:view] ;

XCode의 Interface Builder를 사용하여 이 작업을 수행할 경우 Editor-> Arrangement 아래의 메뉴 옵션을 사용할 수 있습니다."Send to Front", "Send to Back" 등이 있습니다.

맨 위로 가져오려는 보기 내에서...(빠르게)

superview?.bringSubviewToFront(self)

ios에서 zPosition을 사용할 수 있습니다.

salon Detail View라는 이름의 뷰가 있는 경우:@IBOutlet weak var salonDetailView: UIView!

내 경우 이미지를 참조하십시오.

UIView for GMSMapView를 사용합니다.예:@IBOutlet weak var mapViewUI: GMSMapView!

상단의 뷰 살롱 상세뷰를 표시하려면ViewUI

다음과 같이 zPosition을 사용합니다.

salonDetailView.layer.zPosition = 1

cocos2d를 사용하는 경우 [parentView bringSubviewToFront:view]에서 문제가 발생할 수 있지만 적어도 나에게는 작동하지 않았습니다.원하는 뷰를 앞으로 가져오는 대신 다른 뷰를 다시 전송하면 효과가 있었습니다.

[[[CCDirector sharedDirector] view] sendSubviewToBack:((UIButton *) button)]; 

아니면 이걸 쓰거나

- (void)insertSubview:(UIView *)view belowSubview:(UIView*)siblingSubview;

여기와 같이

언급URL : https://stackoverflow.com/questions/4631878/how-to-set-iphone-uiview-z-index

반응형