一、平行四邊形
private func drawParallelogramBezierPath(leftTopRadius : CGFloat , leftBottomRadius : CGFloat , rightTopRadius : CGFloat , rightBottomRadius : CGFloat ,rect : CGRect , smallAngle : CGFloat) -> UIBezierPath{
let bezierPath = UIBezierPath()
/// 左上角的圓心點(diǎn)
let leftTopX = rect.height / tan(smallAngle) + leftTopRadius * tan(smallAngle / 2.0)
let leftTopY = leftTopRadius
let lettTopPoint = CGPoint(x: leftTopX, y: leftTopY)
/// 左下角的圓心點(diǎn)
let leftBottomX = leftBottomRadius / tan(smallAngle / 2)
let leftBottomY = rect.height - leftBottomRadius
let leftBottomPoint = CGPoint(x: leftBottomX, y: leftBottomY)
/// 右上角的圓心點(diǎn)
let rightTopX = rect.width - rightTopRadius / tan(smallAngle / 2.0)
let rightTopY = rightTopRadius
let rightTopPoint = CGPoint(x: rightTopX, y: rightTopY)
/// 右下角的圓心點(diǎn)
let rightBottomX = rect.width - rightBottomRadius * tan(smallAngle / 2) - rect.height / tan(smallAngle)
let rightBottomY = rect.height - rightBottomRadius
let rightBottomPoint = CGPoint(x: rightBottomX, y: rightBottomY)
///左上角結(jié)束點(diǎn)
let leftTopEndX = leftTopX - sin(smallAngle) * leftTopRadius
let leftTopEndY = leftTopRadius - cos(smallAngle) * leftTopRadius
let leftTopEndPoint = CGPoint(x: leftTopEndX, y: leftTopEndY)
bezierPath.addArc(withCenter: lettTopPoint, radius: leftTopRadius, startAngle: -CGFloat.pi / 2.0 - smallAngle, endAngle: -CGFloat.pi / 2.0, clockwise: true)
bezierPath.addArc(withCenter: rightTopPoint, radius: rightTopRadius, startAngle: -CGFloat.pi / 2.0, endAngle: CGFloat.pi / 2.0 - smallAngle, clockwise: true)
bezierPath.addArc(withCenter: rightBottomPoint, radius: rightBottomRadius, startAngle: CGFloat.pi / 2.0 - smallAngle, endAngle: CGFloat.pi / 2.0, clockwise: true)
bezierPath.addArc(withCenter: leftBottomPoint, radius: leftBottomRadius, startAngle: CGFloat.pi / 2.0 , endAngle: 3 / 2 * CGFloat.pi - smallAngle, clockwise: true)
bezierPath.addLine(to: leftTopEndPoint)
return bezierPath
}
2、帶漸變色的平行四邊形
class InnerView : UIView{
/// 邊框
lazy var lineLayer : CAShapeLayer = {
let layer = CAShapeLayer()
layer.lineWidth = 10
layer.strokeColor = UIColor.blue.cgColor
return layer
}()
/// 漸變色
lazy var gradientLayer : CAGradientLayer = {
let layer = CAGradientLayer()
let color2 = UIColor.orange.cgColor
let color1 = UIColor.systemPink.cgColor
layer.startPoint = CGPoint(x: 0, y: 0)
layer.endPoint = CGPoint(x:1, y:0)
layer.colors = [color1,color2]
return layer
}()
/// 繪制漸變色
private func drawGradientLayer(_ rect : CGRect){
gradientLayer.frame = rect
let shaperLayer = CAShapeLayer()
shaperLayer.path = CustomBtn.drawParallelogramBezierPath(leftTopRadius: 20, leftBottomRadius: 5, rightTopRadius: 10, rightBottomRadius: 30, rect: rect, smallAngle: CGFloat.pi / 3).cgPath
self.layer.addSublayer(shaperLayer)
gradientLayer.mask = shaperLayer
}
init() {
super.init(frame: .zero)
self.layer.addSublayer(lineLayer)
self.layer.addSublayer(gradientLayer)
}
override func draw(_ rect: CGRect) {
super.draw(rect)
drawLine(rect)
drawGradientLayer(rect)
}
/// 繪制外邊框
private func drawLine(_ rect : CGRect){
let bezierPath = CustomBtn.drawParallelogramBezierPath(leftTopRadius: 20, leftBottomRadius: 5, rightTopRadius: 10, rightBottomRadius: 30, rect: rect, smallAngle: CGFloat.pi / 3).cgPath
lineLayer.path = bezierPath
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。