从相机和画廊快速捕捉图像

时间:2017-08-10 12:49:40

标签: swift3 camera

我正在尝试从相机获取图像并使用swift 3.0在imageview中显示,但它仅显示白色背景。图像已成功上传到我的服务器。在iPAD上它甚至没有打开相机应用程序。下面是我的代码:我是新来的,请让我知道我在做什么错误。

import UIKit
import Alamofire
import SwiftyJSON
import AlamofireImage
class RadiologyViewController:UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate,UITextViewDelegate{

@IBOutlet weak var indicator1: UIActivityIndicatorView!
@IBOutlet weak var name  : UILabel!
@IBOutlet weak var mobile: UILabel!
@IBOutlet weak var gender: UILabel!
@IBOutlet weak var age   : UILabel!

@IBOutlet weak var indicator4: UIActivityIndicatorView!
@IBOutlet weak var indicator3: UIActivityIndicatorView!
@IBOutlet weak var indicator2: UIActivityIndicatorView!

@IBOutlet weak var pic4text: UITextView!
@IBOutlet weak var pic3text: UITextView!
@IBOutlet weak var pic2text: UITextView!
@IBOutlet weak var pictext1: UITextView!

// WHICH SHOW BUTTON YOU WANT TO SHOW YOU HAVE TO CHANGE HEIGHT CONSTRAINT //
// conPic1height = conPic1height - 20 - UN HIDE BUTTON BY TAKING ITS OUTLET// 
@IBOutlet weak var conPic1height: NSLayoutConstraint!
@IBOutlet weak var conPic2height: NSLayoutConstraint!
@IBOutlet weak var conPic3height: NSLayoutConstraint!
@IBOutlet weak var conPic4height: NSLayoutConstraint!

@IBOutlet weak var pic4: UIImageView!
@IBOutlet weak var pic3: UIImageView!
@IBOutlet weak var pic2: UIImageView!
@IBOutlet weak var pic1: UIImageView!

@IBOutlet weak var complain: UILabel!
@IBOutlet weak var explain : UILabel!
@IBOutlet weak var date    : UILabel!

@IBOutlet weak var btnShowPic4: UIButton!
@IBOutlet weak var btnShowPic3: UIButton!
@IBOutlet weak var btnShowPic2: UIButton!
@IBOutlet weak var btnShowPic1: UIButton!
var patient : Patients? = nil;
var username : String?  = nil;

var picNumber : Int   = 0;
var pic1path : String = "";
var pic2path : String = "";
var pic3path : String = "";
var pic4path : String = "";

var strLabel   = UILabel()
var indicator  = UIActivityIndicatorView()
let effectView = UIVisualEffectView(effect: UIBlurEffect(style: .dark))

override func viewDidLoad() {
    super.viewDidLoad()

    self.navigationController?.isNavigationBarHidden = true
    if patient != nil {
        name.text     = patient?.patientName;
        age.text      = "Age: "+(patient?.patientAge)!;
        gender.text   = "Gender: "+(patient?.patientGender)!;
        mobile.text   = "Mobile: "+(patient?.patientMobile)!;
        date.text     = "Date: "+(patient?.patientDate)!;
        complain.text = "Complaint: " + "\(self.makeComplainText(complain: (patient?.patientComplaint)!))";
        explain.text  = "Explain: "+(patient?.patientExplainComplaint)!;
    }

    let defaults1 = UserDefaults.standard
    let user = defaults1.object(forKey: "user") as? NSData
    let responseData = NSKeyedUnarchiver.unarchiveObject(with: user! as Data) as? ResponseModel

    if responseData != nil {
        if responseData?.profile != nil {
             username = responseData?.profile[0].userName;
        }
    }
    pictext1.delegate = self
    pic2text.delegate = self
    pic3text.delegate = self
    pic4text.delegate = self

    pic1path = (patient?.patientPic1)!;
    pic2path = (patient?.patientPic2)!;
    pic3path = (patient?.patientPic3)!;
    pic4path = (patient?.patientPic4)!;

    pictext1.text = patient?.patientPictxt1;
    pic2text.text = patient?.patientPictxt2;
    pic3text.text = patient?.patientPictxt3;
    pic4text.text = patient?.patientPictxt4;

    let tapFirstGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(imageTapped1(_:)))
    pic1.isUserInteractionEnabled = true
    pic1.addGestureRecognizer(tapFirstGestureRecognizer)

    let tapSecondGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(imageTapped2(_:)))
    pic2.isUserInteractionEnabled = true
    pic2.addGestureRecognizer(tapSecondGestureRecognizer)

    let tapThirdGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(imageTapped3(_:)))
    pic3.isUserInteractionEnabled = true
    pic3.addGestureRecognizer(tapThirdGestureRecognizer)

    let tapFourGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(imageTapped4(_:)))
    pic4.isUserInteractionEnabled = true
    pic4.addGestureRecognizer(tapFourGestureRecognizer)

    if patient?.patientPic1 != "" {
        pic1.image = nil;
        setImage(imageview: pic1, url: (patient?.patientPic1)!,indicator:indicator1)
        showFirstButton(show: false)
    } else {
        showFirstButton(show: true)
        indicator1.isHidden = true
    }

    if patient?.patientPic2 != "" {
        pic2.image = nil;
        showSecondButton(show: false)
        setImage(imageview: pic2, url: (patient?.patientPic2)!,indicator:indicator2)
    } else {
        showSecondButton(show: true)
        indicator2.isHidden = true
    }

    if patient?.patientPic3 != "" {
        pic3.image = nil;
        showThreeButton(show: false)
        setImage(imageview: pic3, url: (patient?.patientPic3)!,indicator:indicator3)
    } else {
        showThreeButton(show: true)
        indicator3.isHidden = true
    }

    if patient?.patientPic4 != "" {
        pic4.image = nil;
        showFourButton(show: false)
        setImage(imageview: pic4, url: (patient?.patientPic4)!,indicator:indicator4)
    } else {
        showFourButton(show: true)
        indicator4.isHidden = true
    }

    let tapKeuboardDismissGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard(_:)))
    view.isUserInteractionEnabled = true
    view.addGestureRecognizer(tapKeuboardDismissGestureRecognizer)
    // Do any additional setup after loading the view.
}

  func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
    if text == "\n"  // Recognizes enter key in keyboard
    {
        textView.resignFirstResponder()
        return false
    }
    return true
}

func dismissKeyboard(_ sender: UITapGestureRecognizer) {
    view.endEditing(true)

}

func imageTapped1(_ sender: UITapGestureRecognizer) {
    if (sender.view as? UIImageView) != nil {
        print("Image Tapped")
        picNumber = 1;
        showActionSheet()
    }
}

func imageTapped2(_ sender: UITapGestureRecognizer) {
    if (sender.view as? UIImageView) != nil {
        print("Image Tapped")
        picNumber = 2;
        showActionSheet()
    }
}

func imageTapped3(_ sender: UITapGestureRecognizer) {
    if (sender.view as? UIImageView) != nil {
        print("Image Tapped")
        picNumber = 3;
        showActionSheet()
    }
}

func imageTapped4(_ sender: UITapGestureRecognizer) {
    if (sender.view as? UIImageView) != nil {
        print("Image Tapped")
        picNumber = 4;
        showActionSheet()
    }
}

func camera()
{
    let myPickerController = UIImagePickerController()
    myPickerController.delegate = self;
    myPickerController.allowsEditing = false
    myPickerController.sourceType = UIImagePickerControllerSourceType.camera
    myPickerController.cameraCaptureMode = .photo
    myPickerController.modalPresentationStyle = .fullScreen
    self.present(myPickerController, animated: true, completion: nil)

}

func photoLibrary()
{

    let myPickerController = UIImagePickerController()
    myPickerController.delegate = self;
    myPickerController.sourceType = UIImagePickerControllerSourceType.photoLibrary

    self.present(myPickerController, animated: true, completion: nil)

}



func showActionSheet() {
    let actionSheet = UIAlertController(title: nil, message: nil, preferredStyle: UIAlertControllerStyle.actionSheet)

    actionSheet.addAction(UIAlertAction(title: "Camera", style: UIAlertActionStyle.default, handler: { (alert:UIAlertAction!) -> Void in
        self.camera()
    }))

    actionSheet.addAction(UIAlertAction(title: "Gallery", style: UIAlertActionStyle.default, handler: { (alert:UIAlertAction!) -> Void in
        self.photoLibrary()
    }))

    actionSheet.addAction(UIAlertAction(title: "Cancel", style: UIAlertActionStyle.cancel, handler: nil))

 //            if (UIDevice.current.userInterfaceIdiom == .pad) {
 //            let popover = actionSheet.popoverPresentationController
 //            popover?.sourceRect = self.view.bounds
 //            popover?.sourceView = self.pic1
 //            popover?.permittedArrowDirections = .any
 //            self.present(actionSheet, animated: true, completion: nil)
 //        } else {
        self.present(actionSheet, animated: true, completion: nil)
    //}
}

@IBAction func btnpic3Click(_ sender: Any) {
    var profileStoryBoard: UIStoryboard!
    profileStoryBoard = UIStoryboard(name:"\(Helper.manageStoryBoardName())ShowImage",bundle: nil)
    let viewcontroller : ImageShowViewController = profileStoryBoard.instantiateViewController(withIdentifier: "ImageShowViewController") as! ImageShowViewController
    viewcontroller.url = pic3path
    self.present(viewcontroller, animated: false)
}

@IBAction func btnpic4Click(_ sender: Any) {
    var profileStoryBoard: UIStoryboard!
    profileStoryBoard = UIStoryboard(name:"\(Helper.manageStoryBoardName())ShowImage",bundle: nil)
    let viewcontroller : ImageShowViewController = profileStoryBoard.instantiateViewController(withIdentifier: "ImageShowViewController") as! ImageShowViewController
    viewcontroller.url = pic4path
    self.present(viewcontroller, animated: false)
}
@IBAction func btnpic1Click(_ sender: UIButton) {
    var profileStoryBoard: UIStoryboard!
    profileStoryBoard = UIStoryboard(name:"\(Helper.manageStoryBoardName())ShowImage",bundle: nil)
    let viewcontroller : ImageShowViewController = profileStoryBoard.instantiateViewController(withIdentifier: "ImageShowViewController") as! ImageShowViewController
    viewcontroller.url = pic1path
    self.present(viewcontroller, animated: false)
}
@IBAction func btnpic2Click(_ sender: UIButton) {
    var profileStoryBoard: UIStoryboard!
    profileStoryBoard = UIStoryboard(name:"\(Helper.manageStoryBoardName())ShowImage",bundle: nil)
    let viewcontroller : ImageShowViewController = profileStoryBoard.instantiateViewController(withIdentifier: "ImageShowViewController") as! ImageShowViewController
    viewcontroller.url = pic2path
    self.present(viewcontroller, animated: false)
}
 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {

    if picNumber == 1 {
        pic1.image = info[UIImagePickerControllerOriginalImage] as? UIImage
        uploadImage(image: (info[UIImagePickerControllerOriginalImage] as? UIImage)!)
    } else if picNumber == 2 {
        pic2.image = info[UIImagePickerControllerOriginalImage] as? UIImage
        uploadImage(image: (info[UIImagePickerControllerOriginalImage] as? UIImage)!)
    } else if picNumber == 3 {
        pic3.image = info[UIImagePickerControllerOriginalImage] as? UIImage
        uploadImage(image: (info[UIImagePickerControllerOriginalImage] as? UIImage)!)
    } else {
        pic4.image = info[UIImagePickerControllerOriginalImage] as? UIImage
        uploadImage(image: (info[UIImagePickerControllerOriginalImage] as? UIImage)!)
    }

    self.dismiss(animated: true, completion: nil)

}

func uploadImage(image:UIImage) -> Void {
    if Reachability.isConnectedToNetwork() == true {
    self.showLoading(title: "uploding image");
    let imgData = UIImageJPEGRepresentation(image, 0.2)!
    var path :String = "";
    let parameters = ["username": username]

    Alamofire.upload(multipartFormData: { multipartFormData in
        multipartFormData.append(imgData, withName: "images",fileName: "file.jpg", mimeType: "image/jpg")
        for (key, value) in parameters {
            multipartFormData.append((value?.data(using: String.Encoding.utf8)!)!, withName: key)
        }
        },
                     to:"http://www.dentalsa.net/api/api.php?method=radiaolog_image_update")
    { (result) in
        switch result {
        case .success(let upload, _, _):
            upload.responseJSON { response in
                self.hideLoading()
                let value = response.result.value
                let jsonResponse = JSON(value)
                let status = jsonResponse["status"].stringValue
                let message = jsonResponse["message"].stringValue
                if status == "false" {
                     self.showAlerError(titleText: "Error", messagetext: message);
                }
                path = jsonResponse["path"].stringValue
                if self.picNumber == 1 {
                    self.pic1path = path
                } else if self.picNumber == 2 {
                    self.pic2path = path
                } else if self.picNumber == 3 {
                    self.pic3path = path
                } else if self.picNumber == 4 {
                    self.pic4path = path
                }
                print("ImagePath"+path)
            }

        case .failure(let encodingError):
            print(encodingError)  
        }
    }
    } else {
         self.showAlerError(titleText: "Error", messagetext: "Please check Internet connectivity");
    }

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

func makeComplainText(complain:String) -> String {
    let characters = Array(complain.characters);
    var data="";

    if characters[0] == "1" {
        data += "Check-Up, ";
    }
    if characters[1] == "1" {
        data += "Teeth Cleaning, ";
    }
    if characters[2] == "1" {
        data += "Periodontal Treatment, ";
    }
    if characters[3] == "1" {
        data += "Dental Fillings, ";
    }
    if characters[4] == "1" {
        data += "Prothesis, ";
    }
    if characters[5] == "1" {
        data += "Extraction, ";
    }
    if characters[6] == "1" {
        data += "Hollywoods smile, ";
    }
    if characters[7] == "1" {
        data += "Children's Teeth, ";
    }
    if characters[8] == "1" {
        data += "Bleaching, ";
    }
    return data;
}

@IBAction func saveClick(_ sender: UIButton) {
    let netowrk = NetworkCall();
    if Reachability.isConnectedToNetwork() == true {
        self.showLoading(title: "Please wait")
    netowrk.radiologyUpdate(username: username!,patientId: (patient?.patientID)!,picText1: pictext1.text!,picText2: pic2text.text!,picText3: pic3text.text!,picText4: pic4text.text!,pic1:pic1path,pic2:pic2path,pic3:pic3path,pic4:pic4path) { responseObject in
        self.hideLoading()
        if responseObject.status == "true" {

            print("Success view controller");
            self.showAlerError(titleText: "Success", messagetext: "Details saved Successfully");
        } else {
            self.showAlerError(titleText: "Error", messagetext: responseObject.message!);
        }

        return
    }
} else {
self.showAlerError(titleText: "Error", messagetext: "Please check Internet connectivity");
}
}
func showLoading(title: String) {

    strLabel.removeFromSuperview()
    indicator.removeFromSuperview()
    effectView.removeFromSuperview()

    strLabel = UILabel(frame: CGRect(x: 50, y: 0, width: 160, height: 46))
    strLabel.text = title
    strLabel.font = UIFont.systemFont(ofSize: 14, weight: UIFontWeightMedium)
    strLabel.textColor = UIColor(white: 0.9, alpha: 0.7)

    effectView.frame = CGRect(x: view.frame.midX - strLabel.frame.width/2, y: view.frame.midY - strLabel.frame.height/2 , width: 160, height: 46)
    effectView.layer.cornerRadius = 15
    effectView.layer.masksToBounds = true

    indicator = UIActivityIndicatorView(activityIndicatorStyle: .white)
    indicator.frame = CGRect(x: 0, y: 0, width: 46, height: 46)
    indicator.startAnimating()

    effectView.addSubview(indicator)
    effectView.addSubview(strLabel)
    view.addSubview(effectView)
}

func setImage(imageview :UIImageView,url:String,indicator:UIActivityIndicatorView) -> Void {
    Alamofire.request("http://www.dentalsa.net"+url).responseImage { response in

        if let image = response.result.value {
            indicator.isHidden = true
            imageview.image = image
        }
    }
}

func hideLoading() {
    self.effectView.removeFromSuperview()
    //indicator.stopAnimating()
}

func showAlerError(titleText:String,messagetext:String) {

    let alertController = UIAlertController(title: titleText, message:
        messagetext, preferredStyle: UIAlertControllerStyle.alert)
    alertController.addAction(UIAlertAction(title: "Dismiss", style: UIAlertActionStyle.default,handler: nil))

    self.present(alertController, animated: true, completion: nil)
}


@IBAction func backClick(_ sender: UIButton) {
   _ = self.navigationController?.popViewController(animated: true)
}

func showFirstButton(show :Bool){
    //conPic1height.constant = 150
    btnShowPic1.isHidden = show
    self.view.layoutIfNeeded()
}

func showSecondButton(show :Bool){
    //conPic1height.constant = 150
    btnShowPic2.isHidden = show
    self.view.layoutIfNeeded()
}

func showThreeButton(show :Bool){
    //conPic1height.constant = 150
    btnShowPic3.isHidden = show
    self.view.layoutIfNeeded()
}

func showFourButton(show :Bool){
    //conPic1height.constant = 150
    btnShowPic4.isHidden = show
    self.view.layoutIfNeeded()
}
/*
// MARK: - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    // Get the new view controller using segue.destinationViewController.
    // Pass the selected object to the new view controller.
}
*/

}

我需要从iphone和iPad上的相机和图库中捕捉图像。我不知道我在这里面临的问题是什么。

0 个答案:

没有答案