图片处理

iOS中图片的加载、圆角、阴影实现方式多种多样,我们需着重考虑性能问题

视图阴影

    /// 为UIImageView设置阴影
    ///
    /// - Parameters:
    ///   - color: The color of the shadow
    ///   - opacity: The opacity of the shadow.
    ///   - radius: The blur radius used to create the shadow.
    ///   - path: The shadow path.
    func shadowView(_ color: UIColor, opacity: Float, radius: CGFloat ,path: CGPath) {
        layer.shadowColor = color.cgColor
        layer.shadowOpacity = opacity
        layer.shadowRadius = radius
        // 使用shadowPath可以避免离屏渲染
        layer.shadowPath = path
    }

圆角图片

    /// 圆角图片
    ///
    /// - Parameter radius: 圆角
    /// - Returns: 给定圆角的图片
    func roundImg(radius: CGFloat, itemType: CompressItemType) -> UIImage {
        
        var tempImg = UIImage()
        // cell的size,即图片实际显示大小
        let forSize = itemType.size()
        // 开启上下文
        UIGraphicsBeginImageContextWithOptions(forSize, false, UIScreen.main.scale)
        
        // 设置路径
        UIBezierPath(roundedRect: CGRect(origin: CGPoint.zero, size: forSize), cornerRadius: radius).addClip()
        draw(in: CGRect(origin: CGPoint.zero, size: forSize))
            
        tempImg = UIGraphicsGetImageFromCurrentImageContext()!
        // 关闭上下文
        UIGraphicsEndImageContext()
        return tempImg
    }

注意:这种方法能够避免离屏渲染,但是会占用大量的内存。还有直接对图层设置cornerRadius实现圆角和使用CAShapeLayer实现圆角的,但是这两种方法会产生离屏渲染。CAShapeLayer在iOS9.0以上设置mask不会产生离屏渲染

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 我在湘鹏物流上班那会,看到一个比我还小一岁的公司配送员,他借公司的水洗车。我心里有些佩服他,问他:“你这么年轻就买...
    李金霖西伯利亚狼阅读 314评论 0 0
  • 诗词: 《马诗》李贺 大漠沙如雪,燕山月似钩。 何当金络脑,快走踏清秋。 《塞下曲》 卢纶 月黑雁飞高,单于夜遁逃...
    我们的亲子时光阅读 107评论 0 0