简体   繁体   中英

My Camera crash on ipad 12.1.4 but works fine on iphone

I am using the camera to take photo, it is working fine in iphone, but it crashes when i run it on 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)

    }

I think your error in UIAlertController because in iPad you need to pass source view.

Please check UIAlertController code for 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
            }

You can check this code also in your simulator, please check first and resubmit your build.

Since Apple announce iOS app should run proper in ipad as well. so, we need to make sure when we capture photo from camera and select from photo library we also need to update code for iPad regarding UIImagePickerViewController . I am attaching code which works in both iPhone and 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)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM