Как разрешить пользователю делать снимки и делиться ими? - PullRequest
0 голосов
/ 06 мая 2019

Я использую Xcode 10, swift 5. У меня есть tableViewController, который позволяет пользователю нажимать, проводить пальцем влево и вправо. Когда проведите пальцем вправо, появится ведущая кнопка с надписью «завершено». Когда пользователь нажимает кнопку, появляется диалоговое окно для обмена и позволяет ему поделиться работой. Я изо всех сил пытаюсь реализовать UIPickerController, который позволяет пользователю сфотографировать свой проект и встроить его в диалоговое окно обмена.

override func tableView(_ tableView: UITableView, leadingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {

    let complete = UIContextualAction.init(style: .normal, title: "Complete") { (action, view, completion) in
        let completedTxt = "Look at what I fixed, thanks to @DIY Home Repair!"

        let vc = UIImagePickerController()
            vc.sourceType = .camera
            vc.allowsEditing = false
            vc.delegate = self

        self.present(vc, animated: true)

        let activityController = UIActivityViewController(activityItems: [completedTxt, ], applicationActivities: nil)

        self.present(activityController, animated: true, completion: nil)
        completion(true) // Completion

    }

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    picker.dismiss(animated: true)

    guard let image = info[.originalImage] as? UIImage else {
        print("No image found")
        return
    }

    // print out the image size as a test
    print(image.size)
}

}

Код отображает камеру и позволяет пользователю сделать снимок, но картинка не уходит, и диалоговое окно обмена не появляется. Когда я удаляю код для UIPickerController, появляется диалоговое окно с предварительно заполненным текстом.

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

Это был тяжелый урок. Я рад, что понял мою проблему. Вот код, который работает. Есть только одна проблема. Теперь я могу поделиться текстом и изображением, снятым с камеры, но не могу поделиться им, используя Facebook или приложение для обмена сообщениями. Угадайте, это для другого вопроса.

 override func tableView(_ tableView: UITableView, leadingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
            let complete = UIContextualAction.init(style: .normal, title: "Complete") { (action, view, completion) in

                if UIImagePickerController.isSourceTypeAvailable(.camera) {
                    self.picker.allowsEditing = false
                    self.picker.sourceType = UIImagePickerController.SourceType.camera
                    self.picker.cameraCaptureMode = .photo
                    self.picker.modalPresentationStyle = .fullScreen
                    self.present(self.picker,animated: true,completion: nil)
                } else {
                    self.noCamera()
                }

        }

     func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {

    guard let myImageView = info[.originalImage] as? UIImage else {
        return
    }
    print(myImageView)

    if myImageView != nil {
        self.dismiss(animated: true, completion: nil)
        let activityController = UIActivityViewController(activityItems: [self.completedTxt, myImageView as Any], applicationActivities: nil)

        present(activityController, animated: true, completion: nil)

    }else {
        return
    }
}
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
    dismiss(animated: true, completion: nil)
}
0 голосов
/ 06 мая 2019

Это потому, что когда вы представляете контроллер, уже выполняется задача пользовательского интерфейса, и, следовательно, вы не можете представить 2 контроллера одновременно.

в соответствии с вашей проблемой, вы должны поставить UIActivityViewController в методе didFinishPickingMediaWithInfo, чтобы вы могли добавить свое изображение в общий лист.

...