swift 常用扩展

这篇博客介绍了Swift中对UIView、UIImage、UIButton的扩展,包括自定义控件圆角位置、修剪图片尺寸、设置圆形图片、调整UIButton图文布局和渐变背景色。此外,还讲解了利用MBProgressHUD显示Gif加载动画的方法。

UIView+Extension

扩展方法,下同

import UIKit

extension UIView {
    //扩展方法加载这里
}

自定义控件圆角位置 如:只左上 左下有圆角

func addCorner(roundingCorners: UIRectCorner, cornerSize: CGSize) {
        let path = UIBezierPath(roundedRect: bounds, byRoundingCorners: roundingCorners, cornerRadii: cornerSize)
        let cornerLayer = CAShapeLayer()
        cornerLayer.frame = bounds
        cornerLayer.path = path.cgPath
        layer.mask = cornerLayer
    }

使用

btn.addCorner(roundingCorners:  [.topLeft, .bottomLeft], cornerSize: CGSize(width:4, height:4))

UIImage+Extension

修剪图片尺寸

func imageByCroppingImage(_ size: CGSize) -> UIImage {
        var returnImage: UIImage?
        var scaleFactor: CGFloat = 1.0
        var scaledWidth = size.width
        var scaledHeight = size.height
        var thumbnailPoint = CGPoint(x: 0, y: 0)

        if !self.size.equalTo(size) {
            let widthFactor = size.width / self.size.width
            let heightFactor = size.height / self.size.height

            if widthFactor > heightFactor {
                scaleFactor = widthFactor
            } else {
                scaleFactor = heightFactor
            }

            scaledWidth = self.size.width * scaleFactor
            scaledHeight = self.size.height * scaleFactor

            if widthFactor > heightFactor {
                thumbnailPoint.y = (size.height - scaledHeight) * 0.5
            } else if widthFactor < heightFactor {
                thumbnailPoint.x = (size.width - scaledWidth) * 0.5
            }
        }

        UIGraphicsBeginImageContextWithOptions(size, true, 1)

        var thumbnailRect = CGRect.zero
        thumbnailRect.origin = thumbnailPoint
        thumbnailRect.size.width = scaledWidth
        thumbnailRect.size.height = scaledHeight

        self.draw(in: thumbnailRect)
        returnImage = UIGraphicsGetImageFromCurrentImageContext()

        UIGraphicsEndImageContext()

        return returnImage!
    }

设置圆形图片

func circleImage() -> UIImage {
        //取最短边长
        let shotest = min(self.size.width, self.size.height)
        //输出尺寸
        let outputRect = CGRect(x: 0, y: 0, width: shotest, height: shotest)
        //开始图片处理上下文(由于输出的图不会进行缩放,所以缩放因子等于屏幕的scale即可)
        UIGraphicsBeginImageContextWithOptions(outputRect.size, false, 0)
        let context = UIGraphicsGetCurrentContext()!
        //添加圆形裁剪区域
        context.addEllipse(in: outputRect)
        context.clip()
        //绘制图片
        self.draw(in: CGRect(x: (shotest-self.size.width)/2,
                             y: (shotest-self.size.height)/2,
                             width: self.size.width,
                             height: self.size.height))
        //获得处理后的图片
        let maskedImage = UIGraphicsGetImageFromCurrentImageContext()!
        UIGraphicsEndImageContext()
        return maskedImage
    }

UIButton+Extension

设置UIButton 图片文字方向和距离

//枚举图片的位置
    enum ButtonImageEdgeInsetsStyle {
        case top    //上图下文字
        case left   //左图右文字
        case bottom //下图上文字
        case right  //右图左文字
    }
    // style:图片位置 space:图片与文字的距离
    func layoutButtonImageEdgeInsetsStyle(style:ButtonImageEdgeInsetsStyle,space:CGFloat) {
        let imageWidth:CGFloat = (self.imageView?.frame.size.width)!
        let imageHeight:CGFloat = (self.imageView?.frame.size.height)!

        var labelWidth:CGFloat = 0
        var labelHeight:CGFloat = 0

        labelWidth = (self.titleLabel?.intrinsicContentSize.width)!
        labelHeight = (self.titleLabel?.intrinsicContentSize.height)!

        var imageEdgeInsets:UIEdgeInsets = UIEdgeInsets.zero
        var labelEdgeInsets:UIEdgeInsets = UIEdgeInsets.zero

        switch style {
        case .top:
            imageEdgeInsets = UIEdgeInsetsMake(-labelHeight-space/2.0, 0, 0, -labelWidth)
            labelEdgeInsets = UIEdgeInsetsMake(0, -imageWidth, -imageHeight-space/2.0, 0)
        case .left:
            imageEdgeInsets = UIEdgeInsetsMake(0, -space/2.0, 0, space/2.0)
            labelEdgeInsets = UIEdgeInsetsMake(0, space/2.0, 0, -space/2.0)
        case .bottom:
            imageEdgeInsets = UIEdgeInsetsMake(0, 0, -labelHeight-space/2.0, -labelWidth)
            labelEdgeInsets = UIEdgeInsetsMake(-imageHeight-space/2.0, -imageWidth, 0, 0)
        case .right:
            imageEdgeInsets = UIEdgeInsetsMake(0, labelWidth+space/2.0, 0, -labelWidth-space/2.0)
            labelEdgeInsets = UIEdgeInsetsMake(0, -labelWidth-space/2.0, 0, labelWidth+space/2.0)
        default:
            break
        }

        self.titleEdgeInsets = labelEdgeInsets
        self.imageEdgeInsets = imageEdgeInsets
    }

设置UIButton背景色为渐变色及设置渐变色后修改背景色

func setBtnNormal(fromColor:UIColor, toColor:UIColor, direction:GradientDirection) {
        self.isEnabled = true
        if(self.layer.sublayers == nil || self.layer.sublayers!.count < 2) {
            let gradientColors: [CGColor] = [fromColor.cgColor, toColor.cgColor]
            let gradientLayer: CAGradientLayer = CAGradientLayer()
            gradientLayer.colors = gradientColors
            if(direction == .horizontal) {
                gradientLayer.startPoint = CGPoint(x:0, y:0)
                gradientLayer.endPoint = CGPoint(x:1, y:0)
            }else if(direction == .vertical) {
                gradientLayer.startPoint = CGPoint(x:0, y:0)
                gradientLayer.endPoint = CGPoint(x:0, y:1)
            }else {
                gradientLayer.startPoint = CGPoint(x:0, y:0)
                gradientLayer.endPoint = CGPoint(x:1, y:1)
            }
            gradientLayer.frame = self.bounds
            self.layer.insertSublayer(gradientLayer, at: 0)
            self.layer.cornerRadius = 4
            self.clipsToBounds = true
            self.setTitleColor(UIColor.white, for: .normal)
        }
    }

    func setBtnDisEnbled() {
        if(self.layer.sublayers != nil && self.layer.sublayers!.count > 1) {
            self.layer.sublayers?.remove(at: 0)
        }
        self.isEnabled = false
        self.setTitleColor(MainTextColor, for: .disabled)
        self.backgroundColor = BtnDisEnbledColor
    }


MBProgressHUD+Gif

实现使用gif作loading动画

前提是项目引入 SDWebImage

class func showGifAdded(to view:UIView!, imgNamed name:String, userInterface:Bool){

        let image = UIImage.sd_animatedGIFNamed(name)
        let giftImgView = UIImageView(image: image)
        giftImgView.bounds = CGRect(x:0, y:0, width:50, height:50)
        let hud = MBProgressHUD.showAdded(to: view, animated: true)
        //底座颜色
        hud.bezelView.color = UIColor.white
        hud.bezelView.style = .solidColor
        hud.mode = .customView
        //设置hud的垂直偏移位置
        hud.offset.y = -32
        //userInteraction用来控制hud加载过程中用户是否可以做拖动点击操作,默认true
        hud.isUserInteractionEnabled = userInterface
        hud.customView = giftImgView
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值