美文网首页
014-防止图片拉伸或者缩放显示而影响性能

014-防止图片拉伸或者缩放显示而影响性能

作者: 紫荆秋雪_文 | 来源:发表于2017-02-07 18:46 被阅读75次

    1、应用场景:尤其是在表格中动态显示图片的时候,随着表格的滚动,图片要‘适应’的显示在UIImageView中,这要每次计算就会影响表格性能

    1-1、UIImageView+WebImage

    //
    //  UIImageView+WebImage.swift
    //
    //  Created by 紫荆秋雪 on 17/2/1.
    //  Copyright © 2017年 紫荆秋雪. All rights reserved.
    //
    
    import SDWebImage
    
    extension UIImageView {
    
        /// 设置带有圆圈的用户头像
        ///
        /// - Parameters:
        ///   - urlString: url
        ///   - placeholderImage: 占位图片
        func Revan_setAvatarImage(urlString: String?, placeholderImage: UIImage?) {
            //处理 URL
            guard let urlString = urlString, let url = URL(string: urlString) else {
                //直接设置占位图片
                image = placeholderImage
                return
            }
            
            sd_setImage(with: url, placeholderImage: placeholderImage, options: [], progress: nil) { [weak self] (image, _, _, _) in
                self?.image = image?.Revan_avatarImage(size: self?.bounds.size)
            }
        }
        
        func Revan_setImage(urlString: String?, placeholderImage: UIImage?) {
            //处理 URL
            guard let urlString = urlString, let url = URL(string: urlString) else {
                //直接设置占位图片
                image = placeholderImage
                return
            }
            
            sd_setImage(with: url, placeholderImage: placeholderImage, options: [], progress: nil) { [weak self] (image, _, _, _) in
                self?.image = image?.Revan_image(size: self?.bounds.size)
            }
        }
    
    }
    
    

    1-2、UIImage+Extensions

    //
    //  UIImage+Extensions.swift
    //
    //  Created by 紫荆秋雪 on 17/2/1.
    //  Copyright © 2017年 紫荆秋雪. All rights reserved.
    //
    
    import Foundation
    
    extension UIImage {
        /// 创建头像图像
        ///
        /// - Parameters:
        ///   - size: 尺寸
        ///   - backColor: 背景颜色
        ///   - lineColor: 头像圆圈颜色
        /// - Returns: 裁切后的图像
        func Revan_avatarImage(size: CGSize?, backColor: UIColor = UIColor.white, lineColor: UIColor = UIColor.lightGray) -> UIImage? {
            var size = size
            if size == nil {
                size = self.size
            }
            let rect = CGRect(origin: CGPoint(), size: size!)
            // 创建“图形上下文”
            UIGraphicsBeginImageContextWithOptions(rect.size, true, 0)
            // 设置填充颜色
            backColor.setFill()
            UIRectFill(rect)
            
            // 设置剪切路径
            let path = UIBezierPath(ovalIn: rect)
            // 裁剪
            path.addClip()
            // 画图
            draw(in: rect)
             // 设置剪切路径样式
            let ovalPath = UIBezierPath(ovalIn: rect)
            ovalPath.lineWidth = 2
            lineColor.setStroke()
            ovalPath.stroke()
            let result = UIGraphicsGetImageFromCurrentImageContext()
            UIGraphicsEndImageContext()
            return result
        }
        
        
        /// 创建新图像
        ///
        /// - Parameters:
        ///   - size: 尺寸
        ///   - backColor: 背景颜色
        /// - Returns: 新图像
        func Revan_image(size: CGSize?, backColor: UIColor = UIColor.white) -> UIImage? {
            var size = size
            if size == nil {
                size = self.size
            }
            let rect = CGRect(origin: CGPoint(), size: size!)
            // 创建“图形上下文”
            UIGraphicsBeginImageContextWithOptions(rect.size, true, 0)
            // 设置填充颜色
            backColor.setFill()
            UIRectFill(rect)
            
            // 设置剪切路径
    //        let path = UIBezierPath(ovalIn: rect)
    //        // 裁剪
    //        path.addClip()
            // 画图
            draw(in: rect)
            // 设置剪切路径样式
    //        let ovalPath = UIBezierPath(ovalIn: rect)
    //        ovalPath.lineWidth = 2
    //        lineColor.setStroke()
    //        ovalPath.stroke()
            let result = UIGraphicsGetImageFromCurrentImageContext()
            UIGraphicsEndImageContext()
            return result
        }
        
    }
    

    相关文章

      网友评论

          本文标题:014-防止图片拉伸或者缩放显示而影响性能

          本文链接:https://www.haomeiwen.com/subject/xcymittx.html