83 lines
2.2 KiB
Swift
83 lines
2.2 KiB
Swift
//
|
||
// Public+UI+MCapturedMediaScreen.swift of MijickCamera
|
||
//
|
||
// Created by Tomasz Kurylik. Sending ❤️ from Kraków!
|
||
// - Mail: tomasz.kurylik@mijick.com
|
||
// - GitHub: https://github.com/FulcrumOne
|
||
// - Medium: https://medium.com/@mijick
|
||
//
|
||
// Copyright ©2024 Mijick. All rights reserved.
|
||
|
||
|
||
import SwiftUI
|
||
|
||
/**
|
||
Screen that displays the captured media.
|
||
|
||
- important: A view conforming to **MCapturedMediaScreen** has to be passed directly to ``MCamera``. See ``MCamera/setCapturedMediaScreen(_:)`` for more details.
|
||
|
||
|
||
## Usage
|
||
```swift
|
||
struct ContentView: View {
|
||
var body: some View {
|
||
MCamera()
|
||
.setCapturedMediaScreen(CustomCapturedMediaScreen.init)
|
||
|
||
// MUST BE CALLED!
|
||
.startSession()
|
||
}
|
||
}
|
||
|
||
// MARK: Custom Captured Media Screen
|
||
struct CustomCapturedMediaScreen: MCapturedMediaScreen {
|
||
let capturedMedia: MCameraMedia
|
||
let namespace: Namespace.ID
|
||
let retakeAction: () -> ()
|
||
let acceptMediaAction: () -> ()
|
||
|
||
|
||
var body: some View {
|
||
VStack(spacing: 0) {
|
||
Spacer()
|
||
createContentView()
|
||
Spacer()
|
||
createButtons()
|
||
}
|
||
}
|
||
}
|
||
private extension CustomCapturedMediaScreen {
|
||
func createContentView() -> some View { ZStack {
|
||
if let image = capturedMedia.getImage() { createImageView(image) }
|
||
else { EmptyView() }
|
||
}}
|
||
func createButtons() -> some View {
|
||
HStack(spacing: 24) {
|
||
createRetakeButton()
|
||
createSaveButton()
|
||
}
|
||
}
|
||
}
|
||
private extension CustomCapturedMediaScreen {
|
||
func createImageView(_ image: UIImage) -> some View {
|
||
Image(uiImage: image)
|
||
.resizable()
|
||
.aspectRatio(contentMode: .fit)
|
||
.ignoresSafeArea()
|
||
}
|
||
func createRetakeButton() -> some View {
|
||
Button(action: retakeAction) { Text("Retake") }
|
||
}
|
||
func createSaveButton() -> some View {
|
||
Button(action: acceptMediaAction) { Text("Save") }
|
||
}
|
||
}
|
||
```
|
||
*/
|
||
public protocol MCapturedMediaScreen: View {
|
||
var capturedMedia: MCameraMedia { get }
|
||
var namespace: Namespace.ID { get }
|
||
var retakeAction: () -> () { get }
|
||
var acceptMediaAction: () -> () { get }
|
||
}
|