• swift 2 选择头像图片


     

    一句话选择单个头像图片

    新建ImagePickerViewController类:

    /* let imagePicker = ImagePickerViewController()

    imagePicker.delegate = self

    self.presentViewController(imagePicker, animated: false, completion: nil)

    */

    实现类代理方法

    //MARK: -ImagePickerViewDelegate

    extension FourViewController:ImagePickerViewDelegate{

    func getImage(image: UIImage) {

    headView?.headImage?.image = image

    }

    }

    ImagePickerViewController类中实现代码

    import UIKit

    import AVFoundation

    import MobileCoreServices

    protocol ImagePickerViewDelegate {

        func getImage(image:UIImage)

    }

    class ImagePickerViewController: UIViewController,UIActionSheetDelegate {

        

        var delegate:ImagePickerViewDelegate?

        var alertController:UIAlertController?

        var pickCtr:UIImagePickerController?

        

        

        init(){

            super.init(nibName: nil, bundle: nil)

            self.modalPresentationStyle = .OverFullScreen

            self.view.backgroundColor = UIColor.clearColor()

            pickCtr = UIImagePickerController()

            pickCtr!.delegate = self;

            pickCtr!.allowsEditing = true;

            

        }

        required init?(coder aDecoder: NSCoder) {

            fatalError("init(coder:) has not been implemented")

        }

        override func viewDidAppear(animated: Bool) {

            super.viewDidAppear(animated)

            if (alertController == nil) {

                alertController = UIAlertController(title: "选择文件源", message: nil, preferredStyle: .ActionSheet)

                

                alertController?.addAction(UIAlertAction(title: "打开相机", style: .Default, handler: { (action) in

                    self.takePhoto()

                }))

                

                alertController?.addAction(UIAlertAction(title: "打开相册", style: .Default, handler: { (action) in

                    self.localPhoto()

                    

                }))

                

                alertController?.addAction(UIAlertAction(title: "取消", style: .Default, handler: { (action) in

                    self.dismissViewControllerAnimated(false, completion: nil)

                }))

                self.presentViewController(alertController!, animated: true, completion: nil)

                

            }

        }

        

        /// 打开相册

        func localPhoto(){

            if (self.isPhotoLibraryAvailable()){

                pickCtr?.sourceType = UIImagePickerControllerSourceType.PhotoLibrary

                self.presentViewController(pickCtr!, animated: true, completion: nil)

            }else{

                let alert = UIAlertController(title: nil, message: "相册不可用", preferredStyle: UIAlertControllerStyle.Alert)

                alert.addAction(UIAlertAction(title: "确定", style: UIAlertActionStyle.Default, handler: { (action) in

                    self.dismissViewControllerAnimated(false, completion: nil)

                }))

                self.presentViewController(alert, animated: true, completion: nil)

            }

        }

        /// 打开相机takePhoto

        func takePhoto(){

            let mediaType = AVMediaTypeVideo

            let authStatus = AVCaptureDevice.authorizationStatusForMediaType(mediaType)

            let you = self.isCameraAvailable()==true

            let my = self.doesCameraSupportTakingPhotos()==true

            pprintLog("you:(you)")

            pprintLog("my:(my)")

            pprintLog("myandyou:(my&&you)")

            

            if(authStatus == AVAuthorizationStatus.Restricted || authStatus == AVAuthorizationStatus.Denied){

                let alert = UIAlertController(title: nil, message: "相机不可用,请到系统设置里更改", preferredStyle: UIAlertControllerStyle.Alert)

                

                alert.addAction(UIAlertAction(title: "确定", style: UIAlertActionStyle.Default, handler: { (action) in

                    self.dismissViewControllerAnimated(false, completion: nil)

                }))

                self.presentViewController(alert, animated: true, completion: nil)

                

            }else if(self.isCameraAvailable()==true && self.doesCameraSupportTakingPhotos()==true){

                pickCtr!.sourceType = UIImagePickerControllerSourceType.Camera

                self.presentViewController(pickCtr!, animated: true, completion: nil)

            }else{

                let alert = UIAlertController(title: nil, message: "相机不可用", preferredStyle: UIAlertControllerStyle.Alert)

                

                alert.addAction(UIAlertAction(title: "确定", style: UIAlertActionStyle.Default, handler: { (action) in

                    self.dismissViewControllerAnimated(false, completion: nil)

                }))

                self.presentViewController(alert, animated: true, completion: nil)

            }

            

        }

        

        override func viewDidLoad() {

            super.viewDidLoad()

            

        }

        

        override func didReceiveMemoryWarning() {

            super.didReceiveMemoryWarning()

            

        }

    }

    //MARK: - UIImagePickerControllerDelegate

    extension ImagePickerViewController:UIImagePickerControllerDelegate,UINavigationControllerDelegate{

        //取消

        func imagePickerControllerDidCancel(picker: UIImagePickerController) {

            pickCtr?.dismissViewControllerAnimated(true, completion: {

                self.dismissViewControllerAnimated(false, completion: nil)

            })

        }

        // 得到图片

        func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {

            let type:String = info[UIImagePickerControllerMediaType] as! String

            

            if (type == kUTTypeImage as String){

                let img:UIImage = info[UIImagePickerControllerEditedImage] as! UIImage

                //对拍照后的照片进行处理

                let image1 = self.fixOrientationIm(img)

                //防止图片翻滚

                let image2 = self.fixOrientationIm(image1)

                //改变图片的size

                let image3 = self.image(image2, targetSize: CGSizeMake(110, 80))

                pickCtr?.dismissViewControllerAnimated(true, completion: {

                    self.dismissViewControllerAnimated(false, completion: {

                        self.delegate?.getImage(image3)

                    })

                })

            }

        }

        

        func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) {

            

        }

        

        

        

    }

    /// 判断手机是否支持。。相机....

    extension ImagePickerViewController{

        /// 判断设备是否有摄像头

        func isCameraAvailable()->Bool{

            return UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera)

        }

        /// 后面的摄像头是否可用

        func isRearCameraAvailable()->Bool{

            return UIImagePickerController.isCameraDeviceAvailable(UIImagePickerControllerCameraDevice.Rear)

        }

        /// 前面的摄像头是否可用

        func isFrontCameraAvailable()->Bool{

            return UIImagePickerController.isCameraDeviceAvailable(UIImagePickerControllerCameraDevice.Front)

        }

        /// 相册是否可用

        func isPhotoLibraryAvailable()->Bool{

            return UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.PhotoLibrary)

        }

        /// 相机是否可以取到图片

        func doesCameraSupportTakingPhotos()->Bool{

            return self.cameraSupportsMedia( kUTTypeImage as String, paramSourceType: UIImagePickerControllerSourceType.Camera)

        }

        /// 相机是否可以取到视频

        func doesCameraSupportTakingVideos()->Bool{

            return self.cameraSupportsMedia( kUTTypeMovie as String, paramSourceType: UIImagePickerControllerSourceType.Camera)

        }

        /// 相册是否可以取到视频

        func canUserPickVideosFromPhotoLibrary()->Bool{

            return self.cameraSupportsMedia(kUTTypeMovie as String, paramSourceType: UIImagePickerControllerSourceType.PhotoLibrary)

        }

        /// 相册是否可以取到图片

        func canUserPickPhotosFromPhotoLibrary()->Bool{

            return self.cameraSupportsMedia(kUTTypeImage as String, paramSourceType: UIImagePickerControllerSourceType.PhotoLibrary)

        }

        

        

        func cameraSupportsMedia(paramMediaType:String,paramSourceType:UIImagePickerControllerSourceType)->Bool{

            var result = false

            if paramMediaType.characters.count==0{

                

                return false

            }

            

            let availableMediaTypes:NSArray? = UIImagePickerController.availableMediaTypesForSourceType(paramSourceType)

            

            if availableMediaTypes != nil{

            availableMediaTypes!.enumerateObjectsUsingBlock { (obj, idx,stop) in

                

                let mediaType:String = obj as! String

                

                if mediaType == paramMediaType{

                    result = true

                    //        stop = true;

                }

            }

            }

            return result;

        }

    }

    //MARK: - 图片方法

    extension ImagePickerViewController{

        //MARK:- 相机照片处理

        func fixOrientationIm(aImage:UIImage) -> UIImage{

            // No-op if the orientation is already correct

            if (aImage.imageOrientation == UIImageOrientation.Up){

                return aImage

            }

            // We need to calculate the proper transformation to make the image upright.

            // We do it in 2 steps: Rotate if Left/Right/Down, and then flip if Mirrored.

            var transform  = CGAffineTransformIdentity

            

            switch (aImage.imageOrientation) {

            case UIImageOrientation.Down:

                break

            case UIImageOrientation.DownMirrored:

                transform = CGAffineTransformTranslate(transform, aImage.size.width, aImage.size.height);

                transform = CGAffineTransformRotate(transform, CGFloat(M_PI));

                break

            case UIImageOrientation.Left:

                break

            case UIImageOrientation.LeftMirrored:

                transform = CGAffineTransformTranslate(transform, aImage.size.width, 0);

                transform = CGAffineTransformRotate(transform, CGFloat(M_PI_2));

                break

            case UIImageOrientation.Right:

                break

            case UIImageOrientation.RightMirrored:

                transform = CGAffineTransformTranslate(transform, 0, aImage.size.height);

                transform = CGAffineTransformRotate(transform, -CGFloat(M_PI_2));

                break

            default:

                break

            }

            

            switch (aImage.imageOrientation) {

            case UIImageOrientation.UpMirrored:

                break

            case UIImageOrientation.DownMirrored:

                transform = CGAffineTransformTranslate(transform, aImage.size.width, 0);

                transform = CGAffineTransformScale(transform, -1, 1);

                break

            case UIImageOrientation.LeftMirrored:

                break

            case UIImageOrientation.RightMirrored:

                transform = CGAffineTransformTranslate(transform, aImage.size.height, 0);

                transform = CGAffineTransformScale(transform, -1, 1);

                break

            default:

                break

            }

            

            // Now we draw the underlying CGImage into a new context, applying the transform

            // calculated above.

            

            let ctx:CGContextRef = CGBitmapContextCreate(nil, Int(aImage.size.width), Int(aImage.size.height), CGImageGetBitsPerComponent(aImage.CGImage!), 0, CGImageGetColorSpace(aImage.CGImage!)!, CGImageGetBitmapInfo(aImage.CGImage!).rawValue)!

            

            CGContextConcatCTM(ctx, transform);

            

            switch (aImage.imageOrientation) {

            case UIImageOrientation.Left:

                break

            case UIImageOrientation.LeftMirrored:

                break

            case UIImageOrientation.Right:

                break

            case UIImageOrientation.RightMirrored:

                // Grr...

                CGContextDrawImage(ctx, CGRectMake(0,0,aImage.size.height,aImage.size.width), aImage.CGImage!);

                break

                

            default:

                CGContextDrawImage(ctx, CGRectMake(0,0,aImage.size.width,aImage.size.height), aImage.CGImage!);

                break

            }

            

            // And now we just create a new UIImage from the drawing context

            let cgimg = CGBitmapContextCreateImage(ctx)

            let img = UIImage(CGImage: cgimg!)

            //        CGContextRelease(ctx)

            //        CGImageRelease(cgimg)

            return img;

            

        }

        /// 裁剪图片

        func image(image:UIImage,targetSize:CGSize)-> UIImage{

            UIGraphicsBeginImageContext(targetSize)

            image.drawInRect(CGRectMake(0, 0, targetSize.width, targetSize.height))

            let newImage = UIGraphicsGetImageFromCurrentImageContext()

            UIGraphicsEndImageContext()

            return newImage!

        }

        

        ///得到图片

        func getImageWithName(iName:String)->UIImage{

            let cloudIcon = UIImage(contentsOfFile: self.cachedPicPath(iName))

            return cloudIcon!

        }

        /// 存储图片

        func saveImage(image:UIImage,name:String){

            UIImagePNGRepresentation(image)?.writeToFile(name, atomically: true)

        }

        /// 获取图片路径

        func cachedPicPath(imageN:String)->String{

            let paths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentationDirectory, NSSearchPathDomainMask.UserDomainMask, true)

            let documentsPath:NSString = paths.first! as NSString

            let imageName = imageN+".png"

            let path = documentsPath.stringByAppendingPathComponent(imageName)

            return path

        }

        

    }

    群号:186052819
  • 相关阅读:
    ArcEngine实现对点、线、面的闪烁(转载)
    好久没写博客了.把这几个月的开发过程做一个总结
    利用暴力反编译的程序处理ArcXML数据遇到的问题小结(纯粹研究目的)
    ArcSde 9.2与Oracle 10g是最佳搭档
    当ArcEngine报事件同时存在于AxMapControl,MapControl时的解决方法(转载)
    写在苏州火炬接力的最后一站
    提问,如何才能触发鼠标事件
    地铁线路图高性能查找算法系统,最短路径查询地铁网络拓扑高效率算法原创附带demo
    二分查找
    .net面试题
  • 原文地址:https://www.cnblogs.com/zuidap/p/5761633.html
Copyright © 2020-2023  润新知