Le dessin du texte sur les Graphiques en Swift 3
Contexte: je suis en s'appuyant sur une UIImageView avec des Graphiques de Base. Je voudrais puiser une chaîne de texte sur la base des graphismes de dessin.
Ce (hackingwithswift.com) méthode que j'ai utilisé pour dessiner le texte à une image, réglage de mon imageView à cette image, et ensuite tirer dessus avec des graphiques de base. Mais je veux que le texte de la superposition de graphiques de base du dessin.
Maintenant que j'ai déménagé à cette https://stackoverflow.com/a/35574171/6337391 mais il n'est toujours pas me permettre d'écrire sur le dessus de mon dessin.
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()
}
}
Ne marche pas. Le dessin de la chaîne de texte efface complètement la barre. Si le déplacement de la barre de dessin code sous la chaîne de code de dessin, puis les deux sont visibles, mais la barre est alors au-dessus de la chaîne.
Qu'entendez-vous par "je suis de dessin sur une UIImageView avec des Graphiques de Base", et en vertu de quelle classe êtes-vous en cours d'exécution de votre code?
J'ai ajouté un peu de mise en contexte de code, j'espère que ça aide. Je pense que la réponse va mentir à Base de Texte, je vais essayer de trouver une solution sur la route moi-même. Des choses comme link prometteurs
OriginalL'auteur Harry Netzer | 2017-02-28
Vous devez vous connecter pour publier un commentaire.
L'Utilisation De Swift 4:
Pour Swift 4.2, modifier le ci-dessus
attributes
:NSAttributedString.Key.xxx
OriginalL'auteur ingconti
Mettre drawMyText fonction dans la sous-classe uiview et l'appeler à partir d'drawrect fonction, s'il vous plaît laissez-moi savoir si vous avez besoin d'aide
Mon problème est que le dessin du texte efface ce que j'ai dessiné avant. Dans mon exemple ci-dessus, le texte s'affiche mais il efface complètement les lignes j'ai dessiné précédemment. Aussi loin que je peux dire, votre seulement de suggérer que j'ai dessiner du texte dans un rect plutôt que sur un point, ce qui n'est pas rien faire pour moi.
OriginalL'auteur Devesh