今天接着Swift头像上传(1)继续学习
实现效果:点击相册,打开相册
首先需要实现两个协议UIImagePickerControllerDelegate,UINavigationControllerDelegate实现加载和读取相册的功能
- //从本地获取
- func localImage(){
- if UIImagePickerController.isSourceTypeAvailable(.PhotoLibrary){
- self.imagePickerController = UIImagePickerController()
- self.imagePickerController.delegate = self
- self.imagePickerController.allowsEditing = true//允许用户裁剪移动缩放
- self.imagePickerController.sourceType = UIImagePickerControllerSourceType.PhotoLibrary//设置图片来源为图库
- //设置图片拾取器导航条的前景色
- self.imagePickerController.navigationBar.barTintColor = UIColor.orangeColor()
- //设置图片拾取器标题颜色为白色
- self.imagePickerController.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()]
- //设置导航条的着色颜色为白色
- self.imagePickerController.navigationBar.tintColor = UIColor.whiteColor()
- //在当前视图控制器窗口展示图片拾取器
- self.presentViewController(self.imagePickerController, animated: true, completion : nil )
- }else{
- print("读取相册失败")
- }
- }
- //打开相机获取
- func openCamera(){
- if UIImagePickerController.isSourceTypeAvailable(.Camera) {
- self.imagePickerController = UIImagePickerController()
- self.imagePickerController.delegate = self
- self.imagePickerController.allowsEditing = true//允许用户裁剪移动缩放
- self.imagePickerController.sourceType = UIImagePickerControllerSourceType.Camera//设置图片来源为相机
- //设置图片拾取器导航条的前景色
- self.imagePickerController.navigationBar.barTintColor = UIColor.orangeColor()
- //设置图片拾取器标题颜色为白色
- self.imagePickerController.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()]
- //设置导航条的着色颜色为白色
- self.imagePickerController.navigationBar.tintColor = UIColor.whiteColor()
- //在当前视图控制器窗口展示图片拾取器
- self.presentViewController(self.imagePickerController, animated: true, completion : nil )
- }else{
- print("相机不可用,您可能使用的是模拟器,请切换到真机调试")
- }
- }
- //添加代理方法,用于执行图片拾取完成后的代码
- func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
- //判断是否允许裁剪
- if(picker.allowsEditing){
- //裁剪后图片
- self.imageview.image = info["UIImagePickerControllerEditedImage"]as? UIImage
- }else{
- //原始图片
- self.imageview.image = info["UIImagePickerControllerOriginalImage"]as? UIImage
- }
- self.dismissViewControllerAnimated(true, completion: nil )
- }
- //添加代理方法,执行用户取消的代码
- func imagePickerControllerDidCancel(picker: UIImagePickerController) {
- //隐藏图片拾取器
- self.dismissViewControllerAnimated(true, completion: nil )
- }
- override func didReceiveMemoryWarning() {
- super.didReceiveMemoryWarning()
- // Dispose of any resources that can be recreated.
- }
上面的拍照和本地获取,代码有很多相同的地方,可以优化一下:优化思路,把两个方法合为一个。利用传递参数的方式把获取图片来源传递进来。
把判断相机是否能用,图库是否能打开的条件判断语句放在调用改方法的地方。
下次把优化过的代码贴出来,这次就不贴了。