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
}
}