2016-06-18 45 views
0

我的代碼:斯威夫特3 - 無法重寫 'imagePickerController'

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) { 
    self.image = image 
    self.imageStatusLabel.text = "There is a picture" 
    self.imageStatusLabel.textColor = UIColor.blue() 

    picker.dismiss(animated: true, completion: nil) 
} 

這是錯誤:

Cannot override 'imagePickerController' which has been marked unavailable: APIs deprecated as of iOS 7 and earlier are unavailable in Swift

嗯,我試圖使用新功能:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { 
    // But no image in the parameters 
} 

但是,然後,參數中沒有圖像,我可以得到圖像。
我該怎麼辦?

回答

1

你從通過info字典中的圖像,請參閱documentation

你可能想要麼

let image = info[UIImagePickerControllerOriginalImage] as? UIImage 

let image = info[UIImagePickerControllerEditedImage] as? UIImage 
11

的鑰匙你必須使用的信息參數並製作成UIImage。不要忘記,您必須在info.plist文件中輸入「Privacy - Photo Library Usage Description」和「Privacy - Camera Usage Description」,並用一個字符串填充值,說明請求訪問照片庫和相機的原因。

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { 
    if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage { 
     pictureImageView.contentMode = .scaleToFill 
     pictureImageView.image = pickedImage 
    } 

    picker.dismiss(animated: true, completion: nil) 
} 
2

要使用Swift3imagePickerController你需要添加一行鍵:Privacy - Photo Library Usage Description和值是string(如:「訪問您的照片」),以的Info.plist文件,讓我們嘗試如下:

class YourController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 

    let imagePickerButton: UIButton = { 
     let btn = UIButton(frame: CGRect(x: 10, y: 10, width: 100, height: 100)) 
     btn.setTitle("Choose a Photo", for: .normal) 
     btn.setTitleColor(.white, for: .normal) 
     btn.backgroundColor = .blue 
     btn.addTarget(self, action: #selector(handlePickerDidTap), for: .touchUpInside) 

     return btn 
    }() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     view.addSubview(imagePickerButton) 
    } 

    func handlePickerDidTap() { 
     let imagePickerController = UIImagePickerController() 
     imagePickerController.delegate = self 
     imagePickerController.allowsEditing = true 
     present(imagePickerController, animated: true, completion: nil) 
    } 

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 
     print("photo is selected") 
     // do some thing here 
    } 

    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { 
     dismiss(animated: true, completion: nil) 
    } 

} 

希望它有幫助!

0
import UIKit 
import Photos 

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 

@IBOutlet weak var imageView: UIImageView! 

@IBAction func selectPhotoLibrary(_ sender: Any) { 
    let picker = UIImagePickerController() 
    picker.delegate = self 
    if UIImagePickerController.isSourceTypeAvailable(.camera) { 
     picker.sourceType = .camera 
    } else{ 
     print("Kamera desteklenmiyor.") 
    } 
    present(picker, animated: true, completion:nil) 
} 

@IBAction func selectPhotoCamera(_ sender: Any) { 
    let picker = UIImagePickerController() 
    picker.delegate = self 
    picker.sourceType = .photoLibrary 
    present(picker, animated: true, completion:nil) 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
} 

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 
    picker.dismiss(animated: true, completion:nil) 
    guard let image = info[UIImagePickerControllerOriginalImage] as? UIImage else { return } 
    guard let imageData = UIImageJPEGRepresentation(image, 0.8) else { return } 
    self.imageView.image = image 
    print(imageData) 
} 

func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { 
    picker.dismiss(animated: true, completion:nil) 
} 

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

更多的使用細節 - >https://medium.com/@yakupad/swift-uiimagepickercontroller-kullanımı-91771ed4c1d6