Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode 如何将图像从一个viewController获取到下一个viewController,就像全局视图一样_Xcode_Swift - Fatal编程技术网

Xcode 如何将图像从一个viewController获取到下一个viewController,就像全局视图一样

Xcode 如何将图像从一个viewController获取到下一个viewController,就像全局视图一样,xcode,swift,Xcode,Swift,我的CameraController上只有一个摄像头。我想让我的摄像机的图片进入ComposeViewController中图像视图内部的ComposeViewController。所以基本上我需要它,这样拍摄的照片在拍摄后会传输到另一个视图控制器。代码中有两个独立的视图控制器 代码: import UIKit import AVFoundation class CameraController : UIViewController, UIImagePickerControlle

我的
CameraController
上只有一个摄像头。我想让我的
摄像机的图片进入
ComposeViewController
图像
视图内部的
ComposeViewController
。所以基本上我需要它,这样拍摄的照片在拍摄后会传输到另一个视图控制器。代码中有两个独立的视图控制器

代码:

  import UIKit
  import AVFoundation

   class CameraController : UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate{

var captureSession : AVCaptureSession?
var stillImageOutput : AVCaptureStillImageOutput?
var previewLayer : AVCaptureVideoPreviewLayer?
@IBOutlet var cameraView: UIView!

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)
    previewLayer?.frame = cameraView.bounds
}

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)

    captureSession = AVCaptureSession()
    captureSession?.sessionPreset = AVCaptureSessionPreset1920x1080

    var backCamera = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)

    var error : NSError?
    var input = AVCaptureDeviceInput(device: backCamera, error: &error)

    if (error == nil && captureSession?.canAddInput(input) != nil){

        captureSession?.addInput(input)

        stillImageOutput = AVCaptureStillImageOutput()
        stillImageOutput?.outputSettings = [AVVideoCodecKey : AVVideoCodecJPEG]

        if (captureSession?.canAddOutput(stillImageOutput) != nil){
            captureSession?.addOutput(stillImageOutput)

            previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
            previewLayer?.videoGravity = AVLayerVideoGravityResizeAspect
            previewLayer?.connection.videoOrientation = AVCaptureVideoOrientation.Portrait
            cameraView.layer.addSublayer(previewLayer)
            captureSession?.startRunning()

        }

    }

}
@IBOutlet var tempImageView: UIImageView!

   func didPressTakePhoto(){

    if let videoConnection = stillImageOutput?.connectionWithMediaType(AVMediaTypeVideo){
        videoConnection.videoOrientation = AVCaptureVideoOrientation.Portrait
        stillImageOutput?.captureStillImageAsynchronouslyFromConnection(videoConnection, completionHandler: {
            (sampleBuffer, error) in

            if sampleBuffer != nil {

                var imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(sampleBuffer)
                var dataProvider  = CGDataProviderCreateWithCFData(imageData)
                var cgImageRef = CGImageCreateWithJPEGDataProvider(dataProvider, nil, true, kCGRenderingIntentDefault)

                var image = UIImage(CGImage: cgImageRef, scale: 1.0, orientation: UIImageOrientation.Right)

                self.tempImageView.image = image
                self.tempImageView.hidden = false

            }                            
        })
    }             
}

var didTakePhoto = Bool()

func didPressTakeAnother(){
    if didTakePhoto == true{
        tempImageView.hidden = true
        didTakePhoto = false            
    }
    else{
        captureSession?.startRunning()
        didTakePhoto = true
        didPressTakePhoto()            
    }

}

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
    didPressTakeAnother()
}

  }

   //-----Below is my Next View Controller where i want the image from      the above view controller to show up---------------------------------------      ---------------------------------------------------------------------------  --------------

       class ComposeViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate, UITextViewDelegate {

@IBOutlet weak var captionTextView: UITextView!
@IBOutlet weak var previewImage: UIImageView!

let tap = UITapGestureRecognizer()

override func viewDidLoad() {
    super.viewDidLoad()


    var swipe: UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: "GotoProfile")
    swipe.direction = UISwipeGestureRecognizerDirection.Right
    self.view.addGestureRecognizer(swipe)

    tap.numberOfTapsRequired = 2
    tap.addTarget(self, action: "GoBack")
    view.userInteractionEnabled = true
    view.addGestureRecognizer(tap)

    captionTextView.delegate = self 

    // Do any additional setup after loading the view.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.

}
func CaptonField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {

    if range.length + range.location > count(captionTextView.text){

        return false

    }

    let NewLength = count(captionTextView.text) + count(string) - range.length
    return NewLength <= 35
}


@IBAction func chooseImageFromCamera() {
    let picker = UIImagePickerController()

    picker.delegate = self
    picker.sourceType = .Camera

    presentViewController(picker,animated: true, completion:nil)

}    

func GotoProfile(){
    self.performSegueWithIdentifier("NewCameraViewFromComposeSegue", sender: nil)

}
func GoBack(){
    self.performSegueWithIdentifier("GoBackFromCamerasegue", sender: nil)

}


@IBAction func addImageTapped(sender: AnyObject) {
    let imagePicker = UIImagePickerController()

    imagePicker.delegate = self
    imagePicker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
    imagePicker.mediaTypes = UIImagePickerController.availableMediaTypesForSourceType(.PhotoLibrary)!
    imagePicker.allowsEditing = false

    self.presentViewController(imagePicker, animated: true, completion: nil)

}
    func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage!, editingInfo: [NSObject : AnyObject]!) {

        self.previewImage.image = image

        self.dismissViewControllerAnimated(true, completion: nil)

    }
func textViewShouldEndEditing(textView: UITextView) -> Bool {
    captionTextView.resignFirstResponder()
    return true;
}

@IBAction func composeTapped(sender: AnyObject) {

    let date = NSDate()
    let dateFormatter = NSDateFormatter()
    dateFormatter.timeStyle = NSDateFormatterStyle.ShortStyle
    dateFormatter.dateStyle = NSDateFormatterStyle.ShortStyle
    let localDate = dateFormatter.stringFromDate(date)

    let imageToBeUploaded = self.previewImage.image
    let imageData = UIImagePNGRepresentation(imageToBeUploaded)


    let file: PFFile = PFFile(data: imageData)
    let fileCaption: String = self.captionTextView.text

    var photoToUpload = PFObject(className: "Posts")
    photoToUpload["Image"] = file
    photoToUpload["Caption"] = fileCaption
    photoToUpload["addedBy"] = PFUser.currentUser()?.username
    photoToUpload["date"] = localDate

    photoToUpload.save()

    println("Successfully Posted.")

    let vc: AnyObject? = self.storyboard?.instantiateViewControllerWithIdentifier("NavigationController")
    self.presentViewController(vc as! UIViewController, animated: true, completion: nil)       

 }
 }
导入UIKit
进口AVF基金会
类CameraController:UIViewController、UIImagePickerController、UINavigationController、UINavigationController{
var captureSession:AVCaptureSession?
var stillImageOutput:AVCaptureSillImageOutput?
var previewLayer:AVCaptureVideoPreviewLayer?
@IBVAR摄像师:UIView!
重写func viewDidLoad(){
super.viewDidLoad()
//加载视图后执行任何其他设置。
}
重写函数didReceiveMemoryWarning(){
超级。我收到了记忆警告()
//处置所有可以重新创建的资源。
}
覆盖功能视图显示(动画:Bool){
super.viewdide显示(动画)
previewLayer?.frame=cameraView.bounds
}
覆盖功能视图将出现(动画:Bool){
超级。视图将显示(动画)
captureSession=AVCaptureSession()
captureSession?.sessionPreset=AVCaptureSessionPreset1920x1080
var backCamera=AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
var错误:N错误?
var输入=AVCaptureDeviceInput(设备:后置摄像头,错误:&错误)
如果(错误==nil&&captureSession?.canAddInput(输入)!=nil){
captureSession?.addInput(输入)
stillImageOutput=AVCaptureSillImageOutput()
stillImageOutput?.outputSettings=[AVVideoCodeKey:AVVideoCodeJPEG]
if(captureSession?.CanadOutput(静止图像输出)!=nil){
captureSession?.addOutput(静态图像输出)
previewLayer=AVCaptureVideoPreviewLayer(会话:captureSession)
previewLayer?.videoGravity=AVLayerVideoGravityResizeAspect
previewLayer?.connection.videoOrientation=AVCaptureVideoOrientation.Portrait
cameraView.layer.addSublayer(预览层)
captureSession?.startRunning()
}
}
}
@IBVAR tempImageView:UIImageView!
func didPressTakePhoto(){
如果let videoConnection=stillImageOutput?.connectionWithMediaType(AVMediaTypeVideo){
videoConnection.videoOrientation=AVCaptureVideoOrientation.Portrait
stillImageOutput?.CaptureSillImageAsynchronousLyfromConnection(视频连接,completionHandler:{
(采样缓冲区,错误)在
如果sampleBuffer!=nil{
var imageData=AvCaptureSillImageOutput.jpegStillImageNSDataRepresentation(sampleBuffer)
var dataProvider=CGDataProviderCreateWithCFData(imageData)
var cgImageRef=CGImageCreateWithJPEGDataProvider(dataProvider,nil,true,kcgrenderingententDefault)
var image=UIImage(CGImage:cgImageRef,比例:1.0,方向:UIImageOrientation.Right)
self.tempImageView.image=图像
self.tempmageview.hidden=false
}                            
})
}             
}
var didTakePhoto=Bool()
func didpresstake另一个(){
如果didTakePhoto==true{
tempImageView.hidden=true
didTakePhoto=false
}
否则{
captureSession?.startRunning()
didTakePhoto=true
didPressTakePhoto()
}
}
覆盖func touchesBegined(触摸:设置,withEvent事件:UIEvent){
我又问了一个问题
}
}
//-----下面是我的下一个视图控制器,我希望上面的视图控制器中的图像显示在这里----------------------------------------------------------------------------------------------------------
类ComposeViewController:UIViewController、UIImagePickerController、UINavigationController、UITextViewDelegate{
@IBOutlet弱var captionTextView:UITextView!
@IBMOutlet弱var预览图像:UIImageView!
让tap=uitappesturerecognizer()
重写func viewDidLoad(){
super.viewDidLoad()
var swipe:UISwipeGestureRecognizer=UISwipeGestureRecognizer(目标:self,操作:“GotoProfile”)
swipe.direction=uiswipgesturerecognizerdirection.Right
self.view.addgestureRecognitor(滑动)
tap.numberOfTapsRequired=2
点击.addTarget(自我,动作:“GoBack”)
view.userInteractionEnabled=true
view.AddGestureRecognitor(点击)
captionTextView.delegate=self
//加载视图后执行任何其他设置。
}
重写函数didReceiveMemoryWarning(){
超级。我收到了记忆警告()
//处置所有可以重新创建的资源。
}
func CaptonField(textField:UITextField,shouldChangeCharactersRange:NSRange,replacementString:string)->Bool{
如果range.length+range.location>count(captionTextView.text){
返回错误
}
让NewLength=count(captionTextView.text)+count(string)-range.length
返回新长度布尔{
captionTextView.resignFirstResponder()辞职
返回true;
}
@iAction func composeTapped(发送方:AnyObject){
let date=NSDate()
让dateFormatter=NSDateFormatter()
dateFormatter.timeStyle=NSDateFormatterStyle.ShortStyle
dateFormatter.dateStyle=NSDateFormatterStyle.ShortStyle
让localDate=dateFormatter.stringFromDate(日期)
让imageToBeUploaded=self.previewImage.image
让imageData=UIImagePNgPresentation(imageToBeUploaded)
let file:PFFile=PFFile(数据:imageData)
让fileCaption:String=self.captionTextView.text
var photoToUpload=PFObject(类名:“Posts”)
photoToUpload[“图像”]=文件
photoToUpload[“Caption”]=文件标题
photoToUpload[“addedBy”]=PFUser.currentUser()?.username
photoToUpload[“日期”]=localDate
光秃
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "ComposeVCIdentifier" {            
        let composeViewController = segue.destinationViewController as! ComposeViewController
        composeViewController.someVariable = myPicture
    }
}