added screenshot view
Signed-off-by: Matt Bruce <mbrucedogs@gmail.com>
This commit is contained in:
parent
8f01d78146
commit
772cb6e437
@ -0,0 +1,139 @@
|
||||
import SwiftUI
|
||||
import Bedrock
|
||||
|
||||
struct ScreenshotCameraPlaceholder: View {
|
||||
let ringWidth: CGFloat
|
||||
let ringColor: Color
|
||||
let ringOpacity: Double
|
||||
|
||||
init(
|
||||
ringWidth: CGFloat = 70,
|
||||
ringColor: Color = .white,
|
||||
ringOpacity: Double = 0.7
|
||||
) {
|
||||
self.ringWidth = ringWidth
|
||||
self.ringColor = ringColor
|
||||
self.ringOpacity = ringOpacity
|
||||
}
|
||||
|
||||
private var backgroundImage: UIImage? {
|
||||
guard let imageURL = Bundle.main.url(forResource: "image", withExtension: "png") else {
|
||||
return nil
|
||||
}
|
||||
return UIImage(contentsOfFile: imageURL.path)
|
||||
}
|
||||
|
||||
@ViewBuilder
|
||||
private func cameraImageLayer(size: CGSize) -> some View {
|
||||
if let backgroundImage {
|
||||
Image(uiImage: backgroundImage)
|
||||
.resizable()
|
||||
.scaledToFill()
|
||||
.frame(width: size.width, height: size.height, alignment: .center)
|
||||
.clipped()
|
||||
} else {
|
||||
Color.black
|
||||
.frame(width: size.width, height: size.height)
|
||||
}
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
GeometryReader { geometry in
|
||||
let size = geometry.size
|
||||
ZStack {
|
||||
cameraImageLayer(size: size)
|
||||
|
||||
ringColor
|
||||
.opacity(ringOpacity)
|
||||
.ignoresSafeArea()
|
||||
|
||||
cameraImageLayer(size: size)
|
||||
.mask {
|
||||
RoundedRectangle(cornerRadius: Design.CornerRadius.large)
|
||||
.padding(ringWidth)
|
||||
}
|
||||
|
||||
PlaceholderGridOverlay(ringWidth: ringWidth)
|
||||
.allowsHitTesting(false)
|
||||
|
||||
VStack(spacing: 0) {
|
||||
HStack {
|
||||
Spacer()
|
||||
PlaceholderTopButton(
|
||||
systemImage: "gearshape.fill",
|
||||
accessibilityLabel: "Settings"
|
||||
)
|
||||
}
|
||||
.padding(.top, ringWidth + Design.Spacing.medium)
|
||||
.padding(.trailing, Design.Spacing.medium)
|
||||
|
||||
Spacer()
|
||||
|
||||
VStack(spacing: Design.Spacing.medium) {
|
||||
ZoomControlView(
|
||||
zoomFactor: 1.0,
|
||||
isCenterStageActive: false
|
||||
)
|
||||
CaptureButton(action: { })
|
||||
.padding(.bottom, Design.Spacing.large)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.ignoresSafeArea()
|
||||
.accessibilityIdentifier("screenshot-green-screen")
|
||||
}
|
||||
}
|
||||
|
||||
private struct PlaceholderTopButton: View {
|
||||
let systemImage: String
|
||||
let accessibilityLabel: String
|
||||
|
||||
var body: some View {
|
||||
Image(systemName: systemImage)
|
||||
.font(.title3)
|
||||
.foregroundStyle(.white)
|
||||
.frame(width: 44, height: 44)
|
||||
.background(Color.black.opacity(Design.Opacity.medium), in: Circle())
|
||||
.overlay {
|
||||
Circle()
|
||||
.strokeBorder(Color.white.opacity(Design.Opacity.subtle), lineWidth: Design.LineWidth.thin)
|
||||
}
|
||||
.shadow(radius: Design.Shadow.radiusSmall)
|
||||
.accessibilityLabel(accessibilityLabel)
|
||||
}
|
||||
}
|
||||
|
||||
private struct PlaceholderGridOverlay: View {
|
||||
let ringWidth: CGFloat
|
||||
|
||||
var body: some View {
|
||||
GeometryReader { geometry in
|
||||
let insetRect = CGRect(
|
||||
x: ringWidth,
|
||||
y: ringWidth,
|
||||
width: geometry.size.width - (ringWidth * 2),
|
||||
height: geometry.size.height - (ringWidth * 2)
|
||||
)
|
||||
|
||||
Path { path in
|
||||
for index in 1...2 {
|
||||
let x = insetRect.minX + (insetRect.width * CGFloat(index) / 3)
|
||||
path.move(to: CGPoint(x: x, y: insetRect.minY))
|
||||
path.addLine(to: CGPoint(x: x, y: insetRect.maxY))
|
||||
}
|
||||
|
||||
for index in 1...2 {
|
||||
let y = insetRect.minY + (insetRect.height * CGFloat(index) / 3)
|
||||
path.move(to: CGPoint(x: insetRect.minX, y: y))
|
||||
path.addLine(to: CGPoint(x: insetRect.maxX, y: y))
|
||||
}
|
||||
}
|
||||
.stroke(Color.white.opacity(Design.Opacity.subtle), lineWidth: Design.LineWidth.thin)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#Preview {
|
||||
ScreenshotCameraPlaceholder(ringWidth: 70.0, ringColor: .white, ringOpacity: 0.7)
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user