궁금한 내용을 검색해보세요!
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
서근 개발노트
티스토리에 팔로잉
SWIFTUI/Image

SwiftUI : ContainerRelativeShape (위젯에서만 사용가능)

서근
QUOTE THE DAY

“ 좋은 프로그래머 대부분은 돈이나 대중에게 받을 찬사를 기대하고 프로그래밍을 하지 않고 프로그래밍이 재미 있어서 한다. ”

- 리누스 토르발스 (Linus Torvalds)
Written by SeogunSEOGUN

SwiftUI : ContainerRelativeShape (위젯에서만 사용가능)

본 게시물은 Keith Harrison 게시글을 번역한 자료입니다.

 

ContainerRelativeShape 에 대해 알아보도록 합시다.

ContainerRelativeShape 

 

SwiftUI에는 둥근 사각형을 만드는 많은 방법을 가지고 있지만, 위젯의 모서리 반경을 맞추고 싶다면 어떻게 해야할까요?

 

Apple에서는 iOS 14부터 ContainerRelativeShape 라는 기능을 추가했습니다.

이 기능은 홈 화면 위젯을 만들 때 특히 중요합니다.

 

콘텐츠의 모서리 반경을 위젯의 모서리 반경과 조정하도록 제안합니다.

swift
UNFOLDED
Text("Hello World!")
.font(.title)
.padding()
.background(Color.yellow)
.cornerRadius(10)

위젯의 제일 작은 크기를 사용하여 미리 볼 때의 모양은 다음과 같습니다.

SwiftUI : ContainerRelativeShape (위젯에서만 사용가능) - ContainerRelativeShape 

하지만, cornerRadius 를 사용한다면 모서리에 가까워 질수록 텍스트박스의 모서리가 지저분해집니다

SwiftUI : ContainerRelativeShape (위젯에서만 사용가능) - ContainerRelativeShape 

ContainerRelativeShape은 위젯 개발자의 삶(?)을 더 쉽게 해주기 위해  SwiftUI iOS 14 추가 했습니다.

TIP
 
 

💡현재는 ContainerRelativeShape위젯 내에서만 작동합니다. 다른 곳에서 사용할 수 있지만 직사각형을 만듭니다.

swift
UNFOLDED
Text("Hello World!")
.font(.title)
.padding()
.background(ContainerRelativeShape()
.fill(Color.yellow)
)

SwiftUI : ContainerRelativeShape (위젯에서만 사용가능) - ContainerRelativeShape 

ZStack 내부에 ContainerRelativeShape를 작성 후, inset(by:)수정자를 사용 하여 테두리 크기를 컨트롤 할 수 있습니다.

swift
UNFOLDED
ZStack {
ContainerRelativeShape()
.inset(by: 8)
.fill(Color.yellow)
Text("Hello World!")
.font(.title)
.padding()
}

테두리에 색상을 추가하고 싶다면 ZStack 바로 아래에 Color(.systemColor) 를 추가해줍니다.

swift
UNFOLDED
ZStack {
Color(.systemBlue)
ContainerRelativeShape()
.inset(by: 8)
.fill(Color.yellow)
Text("Hello World!")
.font(.title)
.padding()
}

SwiftUI : ContainerRelativeShape (위젯에서만 사용가능) - ContainerRelativeShape 

모서리의 반경을 설정하는 inset 에 숫자를 높일수록 아래와 같이 화면에 보이게 됩니다.

inset(by: 5) / inset(by: 10) / inset(by: 15)...

 

SwiftUI : ContainerRelativeShape (위젯에서만 사용가능) - ContainerRelativeShape 

위젯 화면 안에 이미지 추가

swift
UNFOLDED
ZStack {
Color(.systemBlue)
Image("atom")
.resizable()
.clipShape(ContainerRelativeShape()
.inset(by: 8))
}

SwiftUI : ContainerRelativeShape (위젯에서만 사용가능) - ContainerRelativeShape 

예제

swift
UNFOLDED
struct ContentView: View {
var body: some View {
ZStack {
ContainerRelativeShape()
.inset(by: 10)
.fill(Color.yellow)
Text("Hello, World!")
.font(.title)
}
.frame(width: 300, height: 200)
.background(Color.blue)
.clipShape(Capsule())
}
}

 

이렇게 오늘은 ContainerRelativeShape에 대해 알아보았습니다. 

 

읽어주셔서 감사합니다🤟

 


잘못된 내용이 있으면 언제든 피드백 부탁드립니다.


서근


위처럼 이미지 와 함께 댓글을 작성할 수 있습니다.