Programing

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

lottogame 2020. 4. 7. 08:17
반응형

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


한 뷰를 다른 뷰 위로 옮기고 싶습니다.보기의 z 인덱스를 어떻게 알 수 있습니까? 위로 이동하는 방법은 무엇입니까?


UIView형제는 감독에 추가되는 순서대로 쌓입니다. UIView계층 구조 방법과 속성보기 순서를 관리 할 수있다. UIView.h에서 :

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

Kolin Krewinkel이 말했듯 [parentView bringSubviewToFront:view]이 뷰를 맨 위로 가져 오지만 뷰가 계층 구조의 모든 형제 자매 인 경우에만 해당됩니다.


zPosition뷰 레이어 속성 ( CALayer객체)을 사용하여 뷰의 z- 색인을 변경할 수 있습니다.

theView.layer.zPosition = 1;

Viktor Nordling 은 다음과 같이 덧붙였습니다. "큰 값이 맨 위에 있습니다. 음수 값을 포함하여 원하는 값을 사용할 수 있습니다." 기본값은 0입니다.

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

#import "QuartzCore/QuartzCore.h"

IB와 스위프트

노란색이 수퍼 뷰이고 빨간색, 녹색 및 파란색이 노란색의 하위 뷰인 유동 레이아웃을 가정하면,

보기-상단에 빨간색보기

목표는 하위 뷰 (녹색이라고합시다)를 맨 위로 이동하는 것입니다.

조회수-상단에 녹색보기

인터페이스 빌더에서

Interface Builder에서 표시 할보기를 Documents Outline의 목록 맨 위로 드래그하면됩니다.

Interface Builder의 뷰 순서

또는보기를 선택한 다음 메뉴에서 편집기> 정렬> 맨 앞으로 보내기로 이동할 수 있습니다.

스위프트에서

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

방법 1

yellowView.bringSubviewToFront(greenView)
  • 이 방법은 위의 IB 답변과 프로그래밍 방식으로 동일합니다.
  • 하위보기가 서로 형제 인 경우에만 작동합니다.
  • 하위보기의 배열은에 포함되어 yellowView.subviews있습니다. 여기 에서 인덱스 에서로 bringSubviewToFront이동합니다 . 이것은으로 볼 수 있습니다greenView02

    print(yellowView.subviews.indexOf(greenView))
    

방법 2

greenView.layer.zPosition = 1
  • 이 방법은 z 축에서 레이어의 3D 위치를 더 높이 (사용자에 더 가깝게) 이동시킵니다. 기본값은 0다른 모든보기에 대한 것이므로 결과는 greenView맨 위에있는 것입니다. 그러나 여전히 배열의 인덱스 0남아 있습니다 yellowView.subviews. 그러나 탭 이벤트와 같은 항목이 여전히 가장 높은 색인 번호의보기로 이동하기 때문에 예기치 않은 결과가 발생할 수 있습니다. 따라서 위의 방법 1을 사용하는 것이 좋습니다.
  • zPosition설정 될 수있다 CGFloat.greatestFiniteMagnitude( CGFloat(FLT_MAX)이 상위에 있는지 확인하기 위해 스위프트의 이전 버전에서).

[parentView bringSubviewToFront:view] ;

XCode의 Interface Builder를 통해이 작업을 수행하려면 Editor-> Arrangement에서 메뉴 옵션을 사용할 수 있습니다. 여기에는 "Send to Front", "Send to Back"등이 있습니다.


보기에서 당신은 정상에 가져오고 싶습니다 ... (신속하게)

superview?.bringSubviewToFront(self)

cocos2d를 사용하는 경우 [parentView bringSubviewToFront : view]에 문제가있을 수 있습니다. 적어도 저에게는 효과가 없었습니다. 내가 원하는 뷰를 전면으로 가져 오는 대신 다른 뷰를 다시 보내서 트릭을 수행했습니다.

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

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

salonDetailView 라는 뷰가 있다면 :@IBOutlet weak var salonDetailView: UIView!

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

GMSMapView에 대한 UIView가 있습니다 .@IBOutlet weak var mapViewUI: GMSMapView!

보기 표시하려면 salonDetailView 의 상단 mapViewUI을

아래와 같이 zPosition을 사용하십시오

salonDetailView.layer.zPosition = 1

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

반응형