215 lines
4.2 KiB
Swift
215 lines
4.2 KiB
Swift
//
|
||
// UIView+.swift
|
||
// yinmeng-ios
|
||
//
|
||
// Created by MaiMang on 2024/2/29.
|
||
//
|
||
|
||
import UIKit
|
||
|
||
extension UIView {
|
||
/// x
|
||
public var x : CGFloat {
|
||
|
||
get {
|
||
return self.frame.origin.x
|
||
}
|
||
set (x) {
|
||
var frame = self.frame
|
||
frame.origin.x = x
|
||
self.frame = frame
|
||
}
|
||
}
|
||
|
||
|
||
/// y
|
||
public var y : CGFloat {
|
||
|
||
get {
|
||
return self.frame.origin.y
|
||
}
|
||
set (y) {
|
||
var frame = self.frame
|
||
frame.origin.y = y
|
||
self.frame = frame
|
||
}
|
||
}
|
||
|
||
|
||
/// maxX
|
||
public var maxX : CGFloat {
|
||
|
||
get {
|
||
return self.frame.maxX
|
||
}
|
||
set(maxX) {
|
||
self.frame.origin.x = maxX - self.frame.size.width
|
||
}
|
||
}
|
||
|
||
/// maxY
|
||
public var maxY : CGFloat {
|
||
|
||
get {
|
||
return self.frame.maxY
|
||
}
|
||
set(maxY) {
|
||
self.frame.origin.y = maxY - self.frame.size.height
|
||
}
|
||
}
|
||
|
||
|
||
/// width
|
||
public var width : CGFloat {
|
||
|
||
get {
|
||
return self.frame.size.width
|
||
}
|
||
set (width) {
|
||
var frame = self.frame
|
||
frame.size.width = width
|
||
self.frame = frame
|
||
}
|
||
}
|
||
|
||
|
||
/// height
|
||
public var height : CGFloat {
|
||
|
||
get {
|
||
return self.frame.size.height
|
||
}
|
||
set (height) {
|
||
var frame = self.frame
|
||
frame.size.height = height
|
||
self.frame = frame
|
||
}
|
||
}
|
||
|
||
|
||
/// centerX
|
||
public var centerX : CGFloat {
|
||
|
||
get {
|
||
return self.center.x
|
||
}
|
||
set (centerX) {
|
||
var center = self.center
|
||
center.x = centerX
|
||
self.center = center
|
||
}
|
||
}
|
||
|
||
|
||
/// centerY
|
||
public var centerY : CGFloat {
|
||
|
||
get {
|
||
return self.center.y
|
||
}
|
||
set (centerY) {
|
||
var center = self.center
|
||
center.y = centerY
|
||
self.center = center
|
||
}
|
||
}
|
||
|
||
|
||
/// size
|
||
public var size : CGSize {
|
||
|
||
get {
|
||
return self.frame.size
|
||
}
|
||
set (size) {
|
||
var newSize = self.frame.size
|
||
newSize = CGSize(width: size.width, height: size.height)
|
||
self.frame.size = newSize
|
||
}
|
||
}
|
||
|
||
|
||
/// origin
|
||
public var origin : CGPoint {
|
||
|
||
get {
|
||
return self.frame.origin
|
||
}
|
||
set (origin) {
|
||
var newOrigin = self.frame.origin
|
||
newOrigin = CGPoint(x: origin.x, y: origin.y)
|
||
self.frame.origin = newOrigin
|
||
}
|
||
}
|
||
|
||
/// borderWidth
|
||
public var borderWidth: CGFloat {
|
||
|
||
get {
|
||
return self.layer.borderWidth
|
||
}
|
||
set (borderWidth){
|
||
self.layer.borderWidth = borderWidth
|
||
|
||
guard self.layer.masksToBounds else {
|
||
return
|
||
}
|
||
self.layer.masksToBounds = true
|
||
}
|
||
}
|
||
}
|
||
|
||
extension UIView {
|
||
//添加4个不同大小的圆角
|
||
func addCorner(cornerRadii:CornerRadii, frame:CGRect){
|
||
let path = createPathWithRoundedRect(bounds: frame, cornerRadii:cornerRadii)
|
||
let shapLayer = CAShapeLayer()
|
||
shapLayer.frame = self.bounds
|
||
shapLayer.path = path
|
||
self.layer.mask = shapLayer
|
||
}
|
||
//各圆角大小
|
||
struct CornerRadii {
|
||
var topLeft :CGFloat = 0
|
||
var topRight :CGFloat = 0
|
||
var bottomLeft :CGFloat = 0
|
||
var bottomRight :CGFloat = 0
|
||
}
|
||
//切圆角函数绘制线条
|
||
func createPathWithRoundedRect( bounds:CGRect,cornerRadii:CornerRadii) -> CGPath
|
||
{
|
||
let minX = bounds.minX
|
||
let minY = bounds.minY
|
||
let maxX = bounds.maxX
|
||
let maxY = bounds.maxY
|
||
|
||
//获取四个圆心
|
||
let topLeftCenterX = minX + cornerRadii.topLeft
|
||
let topLeftCenterY = minY + cornerRadii.topLeft
|
||
|
||
let topRightCenterX = maxX - cornerRadii.topRight
|
||
let topRightCenterY = minY + cornerRadii.topRight
|
||
|
||
let bottomLeftCenterX = minX + cornerRadii.bottomLeft
|
||
let bottomLeftCenterY = maxY - cornerRadii.bottomLeft
|
||
|
||
let bottomRightCenterX = maxX - cornerRadii.bottomRight
|
||
let bottomRightCenterY = maxY - cornerRadii.bottomRight
|
||
|
||
//虽然顺时针参数是YES,在iOS中的UIView中,这里实际是逆时针
|
||
let path :CGMutablePath = CGMutablePath();
|
||
//顶 左
|
||
path.addArc(center: CGPoint(x: topLeftCenterX, y: topLeftCenterY), radius: cornerRadii.topLeft, startAngle: CGFloat.pi, endAngle: CGFloat.pi * 3 / 2, clockwise: false)
|
||
//顶右
|
||
path.addArc(center: CGPoint(x: topRightCenterX, y: topRightCenterY), radius: cornerRadii.topRight, startAngle: CGFloat.pi * 3 / 2, endAngle: 0, clockwise: false)
|
||
//底右
|
||
path.addArc(center: CGPoint(x: bottomRightCenterX, y: bottomRightCenterY), radius: cornerRadii.bottomRight, startAngle: 0, endAngle: CGFloat.pi / 2, clockwise: false)
|
||
//底左
|
||
path.addArc(center: CGPoint(x: bottomLeftCenterX, y: bottomLeftCenterY), radius: cornerRadii.bottomLeft, startAngle: CGFloat.pi / 2, endAngle: CGFloat.pi, clockwise: false)
|
||
path.closeSubpath();
|
||
return path;
|
||
}
|
||
}
|
||
|
||
|