SwiftUIで作成したカメラアプリを、下記のコードの一部を引用して、写真撮影機能ではなく録画機能にして動画撮影のみのアプリにしたいです。
下記が録画機能を追加するために参考にしたコードです。録画機能を一部、作成したアプリに引用しようと思っています(前の質問で回答してくださった方が改変してくれたものになります)
https://teratail.com/questions/292121
作成したカメラアプリは、タップで写真を撮影しますが、動画撮影の機能はありません。上記の録画機能のコードを引用し、作成したカメラアプリのボタンなどの位置を特に変えず、動画撮影のみのアプリにするにはどのコードをどこに引用すればいいでしょうか?
作成したカメラアプリのコードです。テンプレートはsingle view app、swiftUIです。
環境はxcode11.6、swift5です。
上からCoordinator.swift、ImagePicker.swift、UIimageExtension.swift、ContentView.swift
の4つにコードを打ち込んでいます。
(SwiftUIのみで構築する場合、どの部分のコードを変更したらいいかというのも教えていただけると嬉しいです。)
import
1 2class Coordinator: NSObject, UINavigationControllerDelegate, UIImagePickerControllerDelegate { 3 4 var parent:ImagePicker 5 6 init(_ parent :ImagePicker) { 7 self.parent = parent 8 } 9 10 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { 11 let uiImage = info[.originalImage] as! UIImage 12 UIImageWriteToSavedPhotosAlbum(uiImage, nil, nil, nil) 13 parent.image = Image(uiImage: uiImage.redraw()) 14 parent.isPicking = false 15 } 16 17 func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { 18 parent.isPicking = false 19 } 20}
import
1 2struct ImagePicker: UIViewControllerRepresentable { 3 4 @Binding var image:Image? 5 @Binding var isPicking:Bool 6 7 func makeCoordinator() -> Coordinator { 8 Coordinator(self) 9 } 10 11 func makeUIViewController(context: Context) -> UIImagePickerController { 12 let picker = UIImagePickerController() 13 picker.sourceType = .camera 14 picker.delegate = context.coordinator 15 return picker 16 } 17 18 func updateUIViewController(_ uiViewController: UIImagePickerController, context: Context) { 19 } 20 } 21 22 23struct ImagePicker_Previews: PreviewProvider { 24 static var previews: some View { 25 ImagePicker(image: .constant(nil), isPicking: .constant(true)) 26 } 27}
import
1 2extension UIImage { 3 func redraw() -> UIImage { 4 let format = UIGraphicsImageRendererFormat() 5 format.scale = 1 6 return UIGraphicsImageRenderer(size: size, format: format) 7 .image { context in 8 draw(in: CGRect(origin: .zero, size: size)) 9 } 10 } 11}
import
1 2struct ContentView: View { 3 @State var image:Image? 4 @State var isPicking = false 5 var body: some View { 6 ZStack { 7 VStack { 8 VStack { 9 Spacer() 10 image? 11 .resizable() 12 .scaledToFit() 13 Spacer() 14 } 15 HStack { 16 Spacer() 17 Button(action: { 18 self.isPicking = true 19 }) { 20 Image(systemName: "camera") 21 Text("カメラ") 22 }.padding() 23 } 24 } 25 if isPicking { 26 ImagePicker(image: $image, isPicking: $isPicking) 27 .edgesIgnoringSafeArea(.all) 28 .transition(.move(edge: .bottom)) 29 .animation(.easeInOut) 30 } 31 } 32 } 33}
あなたの回答
tips
プレビュー