zPosition은 화면의 앞/뒤(깊이) 순서를 결정하는 값입니다. 값이 클수록 화면의 앞쪽에, 작을수록 뒤쪽에 그려집니다. 주로 CALayer(모든 UIView의 백킹 레이어)와 SpriteKit에서 사용됩니다.
CALayer.zPosition (기본값 0)zPosition이 큰 레이어가 위, 같다면 sublayers 배열 순서가 위// 두 뷰가 같은 superview를 공유한다고 가정
redView.layer.zPosition = 10 // 더 위에 보임
blueView.layer.zPosition = 0
frame, center와 무관하게 그려지는 순서만 바뀜UIView의 터치 hit-testing은 subviews 배열 순서로 처리되며, zPosition 값이 터치 우선순위를 바꾸지 않음bringSubviewToFront(_:), sendSubviewToBack(_:), isUserInteractionEnabled 조정 등으로 해결// 터치 우선순위는 zPosition이 아니라 subviews 순서 영향
view.addSubview(redView) // 먼저 추가
view.addSubview(blueView) // 나중에 추가 → 터치 우선
// 시각적으로만 redView를 위로
redView.layer.zPosition = 5
zPosition은 원근(perspective) 이 적용되면 깊이감에 영향을 줍니다.sublayerTransform.m34를 설정합니다.var t = CATransform3DIdentity
t.m34 = -1.0 / 500.0 // 원근감
containerView.layer.sublayerTransform = t
card.layer.zPosition = 50 // 앞쪽으로 튀어나와 보임
zPosition 값 비교sublayers/subviews 추가 순서 확인clipsToBounds/masksToBounds로 잘려 보이는지 확인alpha)와 isHidden 확인SKNode.zPosition (기본값 0)zPosition이 큰 노드가 위. 같다면 추가/계층 순서가 적용let hero = SKSpriteNode(imageNamed: "hero")
let ui = SKSpriteNode(imageNamed: "ui_panel")
hero.zPosition = 10 // 캐릭터를 UI 뒤/앞으로 조정
ui.zPosition = 100 // UI를 항상 맨 위로
zPosition을 비교하지 않습니다. 부모 내부에서만 정렬됩니다.zPosition만 올리면 되나요?zPosition으로 해결 가능zPosition을 올렸는데 터치는 여전히 아래 뷰로 들어갑니다.bringSubviewToFront로 순서를 바꾸거나, hitTest(_:with:)/point(inside:with:)를 커스터마이징하세요.masksToBounds = true이면 그림자도 잘립니다.shadowPath를 지정해 비용을 줄입니다.sublayerTransform.m34 활용// 1) 버튼을 이미지 위로 올리기
imageView.layer.zPosition = 0
ctaButton.layer.zPosition = 1
// 2) 배지 뷰를 항상 맨 위로 (같은 부모라면)
badgeView.layer.zPosition = 999
// 3) SpriteKit에서 계층 구간으로 관리
background.zPosition = 0
map.zPosition = 100
npc.zPosition = 200
player.zPosition = 300
ui.zPosition = 1000
zPosition은 그려지는 순서(깊이) 를 제어하는 간단하고 강력한 수단입니다.
터치/레이아웃과는 분리되어 있다는 점을 기억하고, 같은 부모-형제 관계에서 시각적 우선순위를 조정하는 용도로 사용하면 문제를 빠르게 해결할 수 있습니다.