SwiftUI

iOS 15에 추가된 background 관련 신규 method

Phililip
728x90

안녕하세요.

 

이번에는 iOS 15부터 새롭게 추가된 SwiftUI의 background 관련 method에 대해 알아볼게요.

 

(이제부터 설명할 모든 method는 iOS 15.0 이상부터 사용이 가능합니다.)

 


 

# 1 background(_:in:fillStyle:)

 
 
method는 2가지가 있어요.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

이 method를 사용하면 뷰의 background를 insettable shape 또는 Shape 모양으로 만들어줄 수 있어요.

 

각 파라미터가 뭔지 한번 살펴볼게요.

 

 

 

## style

 

2번째 파라미터로 넘길 shape를 채우기 위한 ShapeStyle입니다.

 

ShapeStyle 이란, 렌더링 할 때 사용할 색상 또는 패턴을 의미하는데요,

 

ShapeStyle에는 Color, Material 등이 포함됩니다.

 

 

 

 

## shape

 

뷰 뒤에 그려줄 InsettableShape 또는 Shape 프로토콜을 준수하는 인스턴스입니다.

 

InsettableShape는 Shape 기반의 프로토콜이고,

 

Shape는 저희가 흔히 알고 있는 Circle, RoundedRectangle 등이 있어요.

(직접 path를 그려서도 사용 가능합니다.)

 

 

 

 

## fillStype

 

shape를 그릴 때 사용하는 FillStyle입니다.

더 자세한 내용은 좀 더 찾아봐야할 것 같아서 일단 패스.....ㅠㅠ

 

 

## 사용방법

 

사용법은 기존 background(_:) method와 비슷해요.

 

 

 

만약에 아래와 같은 뷰를 만들고 싶다고 해볼게요.

 

 

 

 

기존 방식은 현재 뷰 영역의 background에 style을 지정해주고, clipShape method를 사용해서 원하는 모양으로 잘라줬어요.

 

Text("Hello, world!")
    .foregroundColor(.white)
    .padding()
    .background(.red)
    .clipShape(RoundedRectangle(cornerRadius: 15))

 

 

 

근데 background(_:in:fillStyle:) method를 사용하면 clipShape를 사용하지 않고도 한 번에 처리가 가능합니다.

 

Text("Hello, world!")
    .foregroundColor(.white)
    .padding()
    .background(.red , in: RoundedRectangle(cornerRadius: 15))

 

 

 

 

 

이 method를 사용하면 background에 계층을 가진 뷰를 넣어줄 수 있어요.
 
파라미터도 살펴볼게요.
 

 

 

### alignment

 
 
계층 뷰에 대한 정렬 기준입니다.
 
기본값은 가운데 정렬(center)입니다.
 
 
 

 

### content

 

content는 ViewBuilder인데, background 뷰에 그려줄 뷰를 선언해주는 것입니다.

 
content 클로저 안에 2개 이상의 뷰를 넘긴다면, 자동으로 ZStack으로 감싸버립니다.
 
이때, 클로저 안에 있는 뷰들은 맨 아래부터 차례대로 하나씩 쌓는 방식으로 background 뷰를 생성합니다.
 

 

 

## 사용방법

 
 
예를 들어서, 아래처럼 뷰를 구성하면
 
 
Color.blue
    .frame(width: 200, height: 10)
    .background(alignment: .leading) {
        Color.green
            .frame(width: 10, height: 100)
        Circle()
            .frame(width: 50, height: 50)
    }

 

 

클로저로 2개의 뷰를 넘겼으니 ZStack으로 감싸지고,

 

Color.green이 맨 아래, Circle이 그 위에 위치하게 됩니다.

 

또한 alignment를 leading으로 줬으니, 뷰 가장 왼쪽에 background 뷰가 그려지게 되는 것이죠.

 

 

 

 

#3 background(_:ignoresSafeAreaEdges:)

 

 

 

background 뷰가 safe area를 무시할지 말지 설정하는 method입니다.

 

ignoresSafeAreaEdges의 기본값은 .all 이며, 모든 safe area를 고려하도록 설정하고 싶다면 empty set을 넘겨주면 됩니다.

 

 

 

## 사용방법

 

아래 같은 뷰가 있다고 해볼게요.

 

Color.red
    .padding()

 

Color는 현재 영역에서 최대한 커질 수 있는 만큼 커지기 때문에, safe area를 제외한 영역이 Color 뷰의 영역이 됩니다.

(background가 잘 설정되었는지 보기 위해 padding을 줬어요ㅎㅎ)

 

 

 

 

 

 

 

자, 여기서 safe area 영역을 지켜주면서 background 설정을 해볼게요.

 

Color.red
    .padding()
    .background(.yellow, ignoresSafeAreaEdges: [])

 

 

safe area를 넘지 않는 선에서 background가 설정이 되었습니다.

 

 

 

만약, background 만! safe area를 무시하고 싶다면, ignoresSafeAreaEdges에 .all을 넘겨주세요.

 

Color.red
    .padding()
    .background(.yellow, ignoresSafeAreaEdges: .all)	 ✅

 

 

 

차이점이 뭔지 아시겠나요??ㅎㅎㅎ

 

 

 


 

 

적절한 상황에 적절한 method를 사용하면 유용할 것 같아요ㅎㅎ

 

 

이번 글은 여기서 마무리.

 

 

 

 

 

반응형

'SwiftUI' 카테고리의 다른 글

renderingMode(_:)  (0) 2022.03.01
AlignmentGuide  (0) 2022.02.27
스크린샷 주의 팝업, 화면 녹화 방지  (3) 2022.02.25
SwiftUI Markdown 사용에 대한 3가지 특이점  (0) 2022.02.24
addArc(tangent1End:tangent2End:radius:)  (0) 2022.02.22