Съемка изображений по таймеру в SwiftUI - PullRequest
0 голосов
/ 05 августа 2020

Я следую этому хорошо написанному руководству по привязке изображений с помощью камеры 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 
    }
}

Спасибо!

...