在Swift 3中绘制Core Graphics上的文本

背景:我正在使用Core Graphics绘制UIImageView。 我想最终在核心图形绘图上绘制一个文本字符串。

这个(hackingwithswift.com)方法我用来将文本绘制到图像,将我的imageView设置为该图像,然后用核心图形绘制。 但我希望文本覆盖核心图形绘图。

现在我已经转到这个https://stackoverflow.com/a/35574171/6337391,但它仍然不允许我在我的绘图上写。

class MapViewController: UIViewController { @IBOutlet var imageView: UIImageView! func drawScale() { // establish 6 points to draw a little bar with let length = CGFloat(80.0) let bottom = imageView.bounds.size.height - 15.0 let left = CGFloat(20.0) let top = bottom - 20.0 let middle = top + 10.0 let right = left + length let topLeft = CGPoint(x: left, y: top) let topRight = CGPoint(x: right, y: top) let bottomRight = CGPoint(x: right, y: bottom) let bottomLeft = CGPoint(x: left, y: bottom) let middleLeft = CGPoint(x: left, y: middle) let middleRight = CGPoint(x: right, y: middle) // draw the bar drawLineFrom(fromPoint: topLeft, toPoint: bottomLeft, color: UIColor.red.cgColor, width: 1.0, alias: false) drawLineFrom(fromPoint: topRight, toPoint: bottomRight, color: UIColor.red.cgColor, width: 1.0, alias: false) drawLineFrom(fromPoint: middleLeft, toPoint: middleRight, color: UIColor.red.cgColor, width: 1.0, alias: false) // draw a text string UIGraphicsBeginImageContext(self.imageView.frame.size) let paragraphStyle = NSMutableParagraphStyle() paragraphStyle.alignment = .center let attrs = [ NSFontAttributeName: UIFont.systemFont(ofSize: 12), NSParagraphStyleAttributeName: paragraphStyle, NSForegroundColorAttributeName: UIColor.red] let scaleString = "45 feet" scaleString.draw(at: CGPoint(x: 0, y: 50), withAttributes: attrs) let newImage = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() } /* Stroke a line between two CGPoints. Color, width, anti-alias options. */ func drawLineFrom(fromPoint: CGPoint, toPoint: CGPoint, color: CGColor, width: CGFloat, alias: Bool) { // 1 UIGraphicsBeginImageContext(self.imageView.frame.size) let context = UIGraphicsGetCurrentContext()! context.setShouldAntialias(alias) self.imageView.image?.draw(in: CGRect(x: 0, y: 0, width: self.imageView.frame.size.width, height: self.imageView.frame.size.height)) // 2 context.move(to: fromPoint) context.addLine(to: toPoint) // 3 context.setLineWidth(width) context.setStrokeColor(color) // 4 context.strokePath() // 5 self.imageView.image = UIGraphicsGetImageFromCurrentImageContext() self.imageView.alpha = 1.0 UIGraphicsEndImageContext() } } 

不起作用。 绘制文本字符串会完全删除该栏。 如果在字符串绘图代码下移动条形图代码,则两者都可见,但当然条形图在字符串上方。

使用Swift 4:

 let paragraphStyle = NSMutableParagraphStyle() paragraphStyle.alignment = .center let attributes = [ NSAttributedStringKey.paragraphStyle: paragraphStyle, NSAttributedStringKey.font: UIFont.systemFont(ofSize: 12.0), NSAttributedStringKey.foregroundColor: UIColor.blue ] let myText = "HELLO" let attributedString = NSAttributedString(string: myText, attributes: attributes) let stringRect = CGRect(x: W/2 - 50, y: border, width: 100, height: H) attributedString.draw(in: stringRect) 

Swift 3.0:绘制文字

  func drawMyText(myText:String,textColor:UIColor, FontName:String, FontSize:CGFloat, inRect:CGRect){ let textFont = UIFont(name: FontName, size: FontSize)! let textFontAttributes = [ NSFontAttributeName: textFont, NSForegroundColorAttributeName: textColor, ] as [String : Any] myText.draw(in: inRect, withAttributes: textFontAttributes) } 

调用此函数,下面是例如

 let _rect = CGRect(x: 40, y: 100, width: 40, height: 40) drawMyText(myText: "Hello", textColor: UIColor.black, FontName: "Helvetica Bold", FontSize: 11 , inRect:_rect)