今天又做了从相册选择照片或者拍照,好久不做了。有些淡忘,去网上找了,有些凌乱,所以决定自己稍稍整理下。
1.判断相机是否可用,如果可用就有拍照选项,反正则没有。
let actionSheet: UIActionSheet
// 判断相机是否可用
if UIImagePickerController.isSourceTypeAvailable(.Camera) {
actionSheet = UIActionSheet(title: "请选择头像来源", delegate: self,
cancelButtonTitle: "取消", destructiveButtonTitle: nil,
otherButtonTitles: "从相册选择", "拍照")
} else {
actionSheet = UIActionSheet(title: "请选择头像来源", delegate: self,
cancelButtonTitle: "取消", destructiveButtonTitle: nil,
otherButtonTitles: "从相册选择")
}
actionSheet.showInView(view)
2.实现UIActionSheetDelegate,判断所选择的项
// MARK: - UIActionSheetDelegate
extension AccountViewController: UIActionSheetDelegate {
func actionSheet(actionSheet: UIActionSheet, clickedButtonAtIndex buttonIndex: Int) {
print(buttonIndex)
var sourceType: UIImagePickerControllerSourceType = .PhotoLibrary
switch buttonIndex {
case 1: // 从相册选择
sourceType = .PhotoLibrary
case 2: // 拍照
sourceType = .Camera
default:
return
}
let pickerVC = UIImagePickerController()
pickerVC.view.backgroundColor = UIColor.whiteColor()
pickerVC.delegate = self
pickerVC.allowsEditing = true
pickerVC.sourceType = sourceType
presentViewController(pickerVC, animated: true, completion: nil)
}
}
3.分别对确定和取消事件做处理
// MARK: - UIImagePickerControllerDelegate、UINavigationControllerDelegate
extension AccountViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate {
func imagePickerController(picker: UIImagePickerController,
didFinishPickingMediaWithInfo info: [String : AnyObject]) {
dismissViewControllerAnimated(true, completion: nil)
if let image = info[UIImagePickerControllerEditedImage] as? UIImage {
headerView.setHeadImage(image)
}
}
func imagePickerControllerDidCancel(picker: UIImagePickerController) {
dismissViewControllerAnimated(true, completion: nil)
}
}