ContainerRelativeShape를 특정 모서리에만 적용 [SwiftUI]
ContainerRelativeShape 란 무엇입니까?
적절한 반경으로 SwiftUI 보기의 모서리를 둥글게 만듭니다.
iPhone 11, WidgetKit 등 모서리가 둥근 기기와 UI가 증가하고 있습니다.
조던 싱어
@jsngr
SwiftUI는 iOS 14에서 ContainerRelativeShape()를 제공하여 코너 반경 값을 수동으로 지정할 필요 없이 자동으로 코너 반경을 부모 모양에 동심으로 만듭니다 ✨
오후 17:34 - 2020년 6월 27일
98
784
목적
1. 왼쪽 상단에 배치
2. ContainerRelativeShape 적용
3. 왼쪽 위 모서리만 만들어주세요!
이 문서에서는 3의 구현에 대해 설명합니다.
1. 왼쪽 상단에 배치
2. ContainerRelativeShape 적용
3. 왼쪽 위 모서리만 만들어주세요!
이 문서에서는 3의 구현에 대해 설명합니다.
암호
맞춤 모양
ContainerRelativeShapeSpecificCorner
프로토콜과 Shape
옵션 세트를 사용하여 UIRectCorner
구조체를 만듭니다.
struct ContainerRelativeShapeSpecificCorner: Shape {
private let corners: [UIRectCorner]
init(corner: UIRectCorner...) {
self.corners = corner
}
func path(in rect: CGRect) -> Path {
var p = ContainerRelativeShape().path(in: rect)
if corners.contains(.allCorners) {
return p
}
if !corners.contains(.topLeft) {
p.addPath(Rectangle().path(in: CGRect(x: rect.origin.x, y: rect.origin.y, width: rect.width / 2, height: rect.height / 2)))
}
if !corners.contains(.topRight) {
p.addPath(Rectangle().path(in: CGRect(x: rect.origin.x + rect.width / 2, y: rect.origin.y, width: rect.width / 2, height: rect.height / 2)))
}
if !corners.contains(.bottomLeft) {
p.addPath(Rectangle().path(in: CGRect(x: rect.origin.x, y: rect.origin.y + rect.height / 2, width: rect.width / 2, height: rect.height / 2)))
}
if !corners.contains(.bottomRight) {
p.addPath(Rectangle().path(in: CGRect(x: rect.origin.x + rect.width / 2, y: rect.origin.y + rect.height / 2, width: rect.width / 2, height: rect.height / 2)))
}
return p
}
}
사용 예
// Originally
Image("camera")
.clipShape(ContainerRelativeShape())
// This article's
Image("camera")
.clipShape(ContainerRelativeShapeSpecificCorner(corner: .topLeft, .topRight))
// Complete code sample
struct SampleView: View {
var body: some View {
Group {
Image("camera")
.resizable()
.scaledToFill()
.frame(width: 80, height: 80)
.clipShape(ContainerRelativeShapeSpecificCorner(corner: .topLeft))
}
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading)
.padding(8)
}
}
Reference
이 문제에 관하여(ContainerRelativeShape를 특정 모서리에만 적용 [SwiftUI]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/yuki0n0/apply-containerrelativeshape-only-to-specific-corners-swiftui-1a72
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
struct ContainerRelativeShapeSpecificCorner: Shape {
private let corners: [UIRectCorner]
init(corner: UIRectCorner...) {
self.corners = corner
}
func path(in rect: CGRect) -> Path {
var p = ContainerRelativeShape().path(in: rect)
if corners.contains(.allCorners) {
return p
}
if !corners.contains(.topLeft) {
p.addPath(Rectangle().path(in: CGRect(x: rect.origin.x, y: rect.origin.y, width: rect.width / 2, height: rect.height / 2)))
}
if !corners.contains(.topRight) {
p.addPath(Rectangle().path(in: CGRect(x: rect.origin.x + rect.width / 2, y: rect.origin.y, width: rect.width / 2, height: rect.height / 2)))
}
if !corners.contains(.bottomLeft) {
p.addPath(Rectangle().path(in: CGRect(x: rect.origin.x, y: rect.origin.y + rect.height / 2, width: rect.width / 2, height: rect.height / 2)))
}
if !corners.contains(.bottomRight) {
p.addPath(Rectangle().path(in: CGRect(x: rect.origin.x + rect.width / 2, y: rect.origin.y + rect.height / 2, width: rect.width / 2, height: rect.height / 2)))
}
return p
}
}
// Originally
Image("camera")
.clipShape(ContainerRelativeShape())
// This article's
Image("camera")
.clipShape(ContainerRelativeShapeSpecificCorner(corner: .topLeft, .topRight))
// Complete code sample
struct SampleView: View {
var body: some View {
Group {
Image("camera")
.resizable()
.scaledToFill()
.frame(width: 80, height: 80)
.clipShape(ContainerRelativeShapeSpecificCorner(corner: .topLeft))
}
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading)
.padding(8)
}
}
Reference
이 문제에 관하여(ContainerRelativeShape를 특정 모서리에만 적용 [SwiftUI]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/yuki0n0/apply-containerrelativeshape-only-to-specific-corners-swiftui-1a72텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)