如何在swift中制作像下图一样的标签
答
使用CoreGraphics绘制此表格很复杂。我已经实现了这个不完美的结果。您可以在“drawRect”方法中使用此代码,并且在绘制(或覆盖布局)文本之后。
func drawCanvas1(frame: CGRect = CGRect(x: 0, y: 0, width: 120, height: 100)) {
//// General Declarations
// This non-generic function dramatically improves compilation times of complex expressions.
func fastFloor(_ x: CGFloat) -> CGFloat { return floor(x) }
//// Rectangle Drawing
let rectanglePath = UIBezierPath(roundedRect: CGRect(x: frame.minX + fastFloor(frame.width * 0.25000 + 0.5), y: frame.minY + fastFloor(frame.height * 0.00000 + 0.5), width: fastFloor(frame.width * 1.00000 + 0.5) - fastFloor(frame.width * 0.25000 + 0.5), height: fastFloor(frame.height * 1.00000 + 0.5) - fastFloor(frame.height * 0.00000 + 0.5)), cornerRadius: 10)
UIColor.gray.setFill()
rectanglePath.fill()
//// Bezier 3 Drawing
let bezier3Path = UIBezierPath()
bezier3Path.move(to: CGPoint(x: frame.minX + 0.5, y: frame.minY + 85.5))
bezier3Path.addCurve(to: CGPoint(x: frame.minX + 30.5, y: frame.minY + 64.5), controlPoint1: CGPoint(x: frame.minX + 0.5, y: frame.minY + 85.5), controlPoint2: CGPoint(x: frame.minX + 30.5, y: frame.minY + 85.5))
bezier3Path.addCurve(to: CGPoint(x: frame.minX + 43.5, y: frame.minY + 99.5), controlPoint1: CGPoint(x: frame.minX + 30.5, y: frame.minY + 43.5), controlPoint2: CGPoint(x: frame.minX + 43.5, y: frame.minY + 99.5))
bezier3Path.move(to: CGPoint(x: frame.minX + 0.59, y: frame.minY + 85.5))
bezier3Path.addCurve(to: CGPoint(x: frame.minX + 43.5, y: frame.minY + 99.5), controlPoint1: CGPoint(x: frame.minX - 0.43, y: frame.minY + 86.43), controlPoint2: CGPoint(x: frame.minX + 6.72, y: frame.minY + 99.5))
UIColor.gray.setFill()
bezier3Path.fill()
UIColor.gray.setStroke()
bezier3Path.lineWidth = 1
bezier3Path.lineCapStyle = .round
bezier3Path.lineJoinStyle = .round
bezier3Path.stroke()
}
,我建议你在Illustrator中创建的图像或一些其他的程序与此表格,并把它作为背景。
看看https://www.innofied.com/creating-old-style-message-bubble-swift/ – Malik
试试这个https://www.youtube.com/watch?v=kR9cf_K_9Tk –