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

被折叠的 条评论
为什么被折叠?



