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의 목록 맨 위로 드래그하면됩니다.
또는보기를 선택한 다음 메뉴에서 편집기> 정렬> 맨 앞으로 보내기로 이동할 수 있습니다.
스위프트에서
프로그래밍 방식으로이 작업을 수행하는 몇 가지 방법이 있습니다.
방법 1
yellowView.bringSubviewToFront(greenView)
- 이 방법은 위의 IB 답변과 프로그래밍 방식으로 동일합니다.
- 하위보기가 서로 형제 인 경우에만 작동합니다.
하위보기의 배열은에 포함되어
yellowView.subviews
있습니다. 여기 에서 인덱스 를 에서로bringSubviewToFront
이동합니다 . 이것은으로 볼 수 있습니다greenView
0
2
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
'Programing' 카테고리의 다른 글
UIBarButtonItem을 표시하거나 숨기려면 어떻게합니까? (0) | 2020.04.07 |
---|---|
2 단어 도시처럼 각 단어의 첫 문자를 대문자로 표시하는 방법은 무엇입니까? (0) | 2020.04.07 |
너무 많은 필드를 반환하는 MySQL SELECT를 터미널에 가장 잘 표시하는 방법은 무엇입니까? (0) | 2020.04.07 |
JavaScript에서 IE 버전 (v9 이전) 감지 (0) | 2020.04.07 |
Ruby : 배열에서 첫 번째 요소를 제거하는 가장 쉬운 방법은 무엇입니까? (0) | 2020.04.07 |