Xcode 11.1仅拍摄方形照片-需要4:3

问题描述 投票:0回答:1

square only

我正在使用相机捕获应用程序的图像。触摸照片按钮后,只能以正方形格式保存照片。我想保留4:3格式较旧的相机,并最终允许用户根据需要选择16:9。我未曾能够找到任何代码以编程方式选择纵横比。我只有广场。我什至尝试在设备的“摄像机设置”中锁定“摄像机模式”。幸运的是没用。

这是一个SwiftUI应用。在下面的CameraViewController中,如果我删除allowEditing选项,选择器将冻结-“使用照片”或“重新拍摄”按钮均不起作用。的应用程序不会崩溃,只是视图被冻结。我可以向下滑动视图以关闭并继续使用该应用程序。

我从下面的按钮中调用PhotoCaptureView,该按钮将是等同于主/详细信息。

[PhotoCaptureView:

import SwiftUI
struct PhotoCaptureView: View {

    @EnvironmentObject var cameraSettings: CameraSettings
    @Binding var photos: [UIImage]

    var body: some View {
        return VStack {
            CameraViewController(photos: $photos)
                .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
        }.edgesIgnoringSafeArea(.all)
    }
}

和模型视图CameraViewController:

import UIKit
import SwiftUI
import MobileCoreServices
import AVFoundation

struct CameraViewController: UIViewControllerRepresentable {

    @EnvironmentObject var cameraSettings: CameraSettings
    @Binding var photos: [UIImage]

    func updateUIViewController(_ uiViewContyroller: UIImagePickerController, context: Context) {
        //no code here
    }

    func makeUIViewController(context: UIViewControllerRepresentableContext<CameraViewController>) -> UIImagePickerController {
        let vc = UIImagePickerController()
        if UIImagePickerController.isSourceTypeAvailable(UIImagePickerController.SourceType.camera) {
            vc.sourceType = .camera
            vc.allowsEditing = true
            vc.delegate = context.coordinator
            return vc
        }
        return UIImagePickerController()
    }

    func makeCoordinator() -> Coordinator {
        Coordinator(self)
    }

    class Coordinator: NSObject, UINavigationControllerDelegate, UIImagePickerControllerDelegate {
        var parent: CameraViewController
        init(_ imagePickerController: CameraViewController) {
            self.parent = imagePickerController
        }

        func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
            guard let image = info[.editedImage] as? UIImage else {
                print("no image found")
                return
            }
            print("Image taken successfully, with size \(image.size)")
            parent.photos.append(image)
            picker.dismiss(animated: true) {
                print("in dismiss after successful picture")
            }
        }

        func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
            picker.dismiss(animated: true) {
                print("in did cancel")
            }
        }

        private func pickerController(_ controller: UIImagePickerController, didSelect image: UIImage?) {
            controller.dismiss(animated: true, completion: nil)
        }
    }
}

CameraSettings只是确定是否提供相机选项的傻瓜。

class CameraSettings: ObservableObject {
    @Published var isAuthorized: Bool = false
    @Published var isCameraAvailable: Bool = false
}

Xcode 11.1(11A1027)我正在使用iPhone X iOS 13.1.2

任何指导将不胜感激。

xcode uiimagepickercontroller swiftui
1个回答
0
投票

didFinishPickingMediaWithInfo的信息设置需要指定“ originalImage”,以避免仅显示正方形图片。但是,即使使用已编辑的版本,似乎您也只能移动图像-不能更改外观。

将上面的信息行更改为:守卫让图像=信息[.originalImage]作为? UIImage else {

然后设置:vc.allowsEditing = false

重要的是,文档告诉我:“ UIImagePickerController类仅支持纵向模式。”

© www.soinside.com 2019 - 2024. All rights reserved.