Я следую этому хорошо написанному руководству по привязке изображений с помощью камеры https://www.iosapptemplates.com/blog/swiftui/photo-camera-swiftui
Я бы хотел вместо того, чтобы нажимать кнопку, чтобы сделать снимок, я хотел бы чтобы взять изображение на непрерывном таймере и сгруппировать его с другими данными, доступными в представлении содержимого
Я пытался сделать это с помощью AVCaptureSession, поэтому, если это так, я закрою вопрос и покажу свои попытки в этом .
Это приложение для меня для сбора данных, поэтому меня не волнует стиль, эффективность или что-то в этом роде.
Я включил весь код, но пометил проблемную область ## ################
import SwiftUI
struct CaptureImageView {
/// MARK: - Properties
@Binding var isShown: Bool
@Binding var image: Image?
let var otherData: Whatever = nil
func makeCoordinator() -> Coordinator {
return Coordinator(isShown: $isShown, image: $image)
}
}
extension CaptureImageView: UIViewControllerRepresentable {
func makeUIViewController(context: UIViewControllerRepresentableContext<CaptureImageView>) -> UIImagePickerController {
let picker = UIImagePickerController()
picker.delegate = context.coordinator
picker.sourceType = .camera
return picker
}
func updateUIViewController(_ uiViewController: UIImagePickerController,
context: UIViewControllerRepresentableContext<CaptureImageView>) {
}
}
struct ContentView: View {
@State var image: Image? = nil
@State var showCaptureImageView: Bool = true
let timer = Timer.publish( every: 1, on: .main, in: .common).autoconnect()
var body: some View {
ZStack {
VStack {
image?.resizable()
.frame(width: 250, height: 250 )
.clipShape( Circle())
.overlay(Circle().stroke(Color.white, lineWidth: 4))
.shadow( radius: 10 )
CaptureImageView(isShown: $showCaptureImageView, image: $image)
.onRecieve(timer) { input in
############### PROBLEM AROUND HERE #################################
// THIS IS WHERE I AM ATTEMPTING TO SAVE THE PHOTO, group with other data and send to server BUT CaptureImageView has no member .onRecieve
}
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
А потом в другом файле
import SwiftUI
class Coordinator: NSObject, UINavigationControllerDelegate, UIImagePickerControllerDelegate {
@Binding var isCoordinatorShown: Bool
@Binding var imageInCoordinator: Image?
init(isShown: Binding<Bool>, image: Binding<Image?>) {
_isCoordinatorShown = isShown
_imageInCoordinator = image
}
func imagePickerController(_ picker: UIImagePickerController,
didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
guard let unwrapImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage else {
return }
imageInCoordinator = Image( uiImage: unwrapImage )
isCoordinatorShown = false
}
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
isCoordinatorShown = false
}
}
Спасибо!