2016-11-18 1 views
0

내 장치에 이미지를 저장하려고합니다. 미리보기 위해 다음보기 컨트롤러에 전달할 수 있습니다. 내가하는 일을 사람들이 보는 방법은 그들이 가지고있는 이미지를 uiimage에 저장하는 것입니다. 그런 다음 prepareforsegue 동안 대상 뷰 컨트롤러의 uiimage 변수를 이전 뷰 컨트롤러에서 찍은 사진으로 설정합니다. 거기에서 dest 뷰 컨트롤러에서 다음과 같이 이미지를 디스플레이하는 사람들을 볼 수 있습니다 : imageName.image = imageVariable. 변수를 대상보기 컨트롤러에 전달하고 다음보기 컨트롤러에 변수를 표시하려고하면 변수가 0으로 표시됩니다. 내가 어디로 잘못 가고 있니?사진을 찍어 다른 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

'prepare (for segue :)'에서'self.image'가 nonnil입니까? – Ryan

+0

@ Ryan ok yea 그것은 왜 어떤 가치도 지키지 않는 이유를 설명합니다. prepareforsegue에서 그 nil! 어떤 아이디어가 takephotobuttonclicked 메서드에 이미지를 저장하지 않는 이유는 무엇입니까? –

+0

'sessionOutput.captureStillImageAsynchronously' 블록은 어떨까요? 어떤 오류가 있었습니까? 블록의'self.image'는 non nil입니까? – 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) 
     }) 
} 

은 당신이 ... 해피 코딩 도움이되기를 바랍니다!

+0

고맙습니다. @iProgrammer! destinationVC로는 아무 가치도 없기 때문에 코드를 약간 변경해야했지만 작동합니다! 시간 내 주셔서 감사합니다. –

관련 문제