Сбой моей камеры на iPad 12.1.4, но отлично работает на iphone

#ios #swift

#iOS #swift

Вопрос:

Я использую камеру для фотосъемки, она отлично работает на iphone, но вылетает, когда я запускаю ее на ipad.

 @IBAction func uploadPhotoButtonPressed(_ sender: UIButton) {
        let camera = Camera(delegate_: self)

        let optionMenu = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)

        let takePhoto = UIAlertAction(title: "Take Photo", style: .default) { (alert: UIAlertAction!) -> Void in
            camera.PresentPhotoCamera(self, canEdit: true)
        }

        let sharePhoto = UIAlertAction(title: "Photo Library", style: .default) { (alert: UIAlertAction!) -> Void in
            camera.PresentPhotoLibrary(self, canEdit: true)
        }

        let cancelAction = UIAlertAction(title: "Cancel", style: .cancel) { (alert : UIAlertAction!) -> Void in

            print("Cancel")
        }

        optionMenu.addAction(takePhoto)
        optionMenu.addAction(sharePhoto)

        optionMenu.addAction(cancelAction)

        self.present(optionMenu, animated: true, completion: nil)

    }
  

Комментарии:

1. Вы получаете журнал сбоев?

2. Какое сообщение об ошибке вы получаете? В какой строке происходит сбой?

3. У меня нет iPad, чтобы протестировать ее. apple сообщила об этом сбое при отправке приложения на проверку.

4. Почему вы не используете симулятор iPad в Xcode?

Ответ №1:

Я думаю, что ваша ошибка в UIAlertController, потому что на iPad вам нужно передать исходный вид.

Пожалуйста, проверьте код UIAlertController для iPad

 if let popoverController = yourAlert.popoverPresentationController {
                popoverController.sourceView = self.view //to set the source of your alert
                popoverController.sourceRect = CGRect(x: self.view.bounds.midX, y: self.view.bounds.midY, width: 0, height: 0) // you can set this as per your requirement.
                popoverController.permittedArrowDirections = [] //to hide the arrow of any particular direction
            }
  

Вы также можете проверить этот код в своем симуляторе, пожалуйста, сначала проверьте и повторно отправьте свою сборку.

Ответ №2:

Поскольку Apple анонсирует, что приложение iOS также должно правильно работать на iPad. итак, нам нужно убедиться, что при захвате фотографии с камеры и выборе из библиотеки фотографий нам также необходимо обновить код для iPad относительно UIImagePickerViewController . Я прилагаю код, который работает как на iPhone, так и на iPad.

 let actionSheetController: UIAlertController = UIAlertController(title: "Select Photo", message: "", preferredStyle: .actionSheet)

    let cancelActionButton: UIAlertAction = UIAlertAction(title: "Cancel", style: .cancel) { action -> Void in
        print("Cancel")
    }
    actionSheetController.addAction(cancelActionButton)


    let saveActionButton: UIAlertAction = UIAlertAction(title: "Photolibrary", style: .default)
    { action -> Void in

        self.picker.allowsEditing = true
        self.picker.sourceType = .photoLibrary
        self.present(self.picker, animated: true, completion: nil)

    }
    actionSheetController.addAction(saveActionButton)

    let deleteActionButton: UIAlertAction = UIAlertAction(title: "Camera", style: .default)
    { action -> Void in

        if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.camera)
        {
            self.picker.allowsEditing = true
            self.picker.sourceType = .camera
            self.present(self.picker, animated: true, completion: nil)
        }

    }

    actionSheetController.addAction(deleteActionButton)

    if let popoverController = actionSheetController.popoverPresentationController {

        popoverController.sourceView = self.view
        popoverController.sourceRect = CGRect(x: self.view.bounds.midX, y: self.view.bounds.midY, width: 0, height: 0)
        popoverController.permittedArrowDirections = []
    }
    self.present(actionSheetController, animated: true, completion: nil)