2016-11-18 2 views
0

Я пытаюсь сделать снимок в своем приложении, чтобы сохранить его на своем устройстве и передать его на следующий контроллер просмотра, который нужно просмотреть. То, как я вижу, что люди делают это, - это хранение изображения, которое они принимают в uiimage. Затем во время подготовки к настройке они устанавливают переменную uiimage в контроллере представления назначения на фотографию, которую вы сделали в предыдущем контроллере представления. Оттуда в контроллере просмотра dest я вижу людей, отображающих изображение следующим образом: imageName.image = imageVariable. Когда я передаю переменную в контроллер представления назначения и попытаюсь отобразить ее в следующем контроллере представления, она отображается как значение nil. Где я иду не так?Сделайте снимок и передайте его другому UIViewController Swift 3.0

Первый ViewController:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "ToDetailPage" { 
     let nextScene = segue.destination as! PostDetailPageViewController 
     nextScene.itemImage = self.image 
     // nextScene?.myimg.image = self.image 
    } 
} 

@IBAction func TakePhotoButtonClicked(_ sender: AnyObject) { 

    if let videoConnection = sessionOutput.connection(withMediaType: AVMediaTypeVideo){ 

     sessionOutput.captureStillImageAsynchronously(from: videoConnection, completionHandler: { 
     buffer, error in 
      let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(buffer) 
      self.image = UIImage(data: imageData!) 
      UIImageWriteToSavedPhotosAlbum(UIImage(data: imageData!)!, nil, nil, nil) 
     }) 

    } 


} 

Второй ViewController:

var itemImage: UIImage! 
@IBOutlet weak var myimg: UIImageView! 

override func viewDidLoad() { 

    super.viewDidLoad() 
    self.categories.dataSource = self; 
    self.categories.delegate = self; 
    setUpMap() 
    myimg.image = itemImage 

} 
+0

Является ли 'self.image' nonnil в' prepare (for segue:) '? – Ryan

+0

@ Ryan ok yea, который объяснил бы, почему он не передает никакой ценности. Его ноль в приготовлении! Любые идеи, почему он не хранит изображение в методе takephotobuttonclicked? –

+0

Как насчет блока 'sessionOutput.captureStillImageAsynchronously'? Была ли ошибка? 'self.image' в блоке не равен нулю? – Ryan

ответ

1

Вам нужно нажать ViewController внутри блока. Фактически, что происходит в этом коде, блок завершения вызывается после prepareForSegue. Таким образом, ваш образ всегда «ноль».

Попробуйте нажать ViewController так:

if let videoConnection = sessionOutput.connection(withMediaType: AVMediaTypeVideo){ 


sessionOutput.captureStillImageAsynchronously(from: videoConnection, completionHandler: { 
     buffer, error in 
      let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(buffer) 
      self.image = UIImage(data: imageData!) 
      UIImageWriteToSavedPhotosAlbum(UIImage(data: imageData!)!, nil, nil, nil) 
// push view controller here 
let destinationVC = SecondViewController() 
destinationVC.image = self.image 
self.navigationController.pushViewController(destinationVC, animated: true) 
     }) 
} 

Надеется, что это поможет вам .. С Днем Coding !!

+0

Большое спасибо @iProgrammer! Мне пришлось внести несколько изменений в мой код из-за нулевого значения с destinationVC, но он работает! Я ценю ваше время. –

Смежные вопросы