Je crée une application qui simule une accélération du moteur. Quand je glisse un UISlider, je veux que le pointeur de jauge RPM augmente et que UILabel dans le RPM soit mis à jour. J'ai tout fonctionné à l'exception d'une partie bizarre: le texte dans UILabel écrase lui-même (c'est-à-dire qu'il se dessine sur lui-même de sorte que toutes les valeurs se superposent et qu'il soit illisible). Voici le code de curseur dans mon ViewController:Comportement bizarre rapide lorsque setNeedsDisplay est appelé
@IBAction func changeThrottleSetting(sender: UISlider)
{
compactEngineView.RPMPointerAngleInt = Int(sender.value)
compactEngineView.setNeedsDisplay()
}
Ensuite, dans le compactEngineView lui-même:
var RPMPointerAngleInt = Int()
var RPMPointerAngle: CGFloat { //this angle is used to draw the pointer points later down in the code, didn't show it here just to keep it shorter
var AngleCGFloat = CGFloat(RPMPointerAngleInt)
var Pi = CGFloat(M_PI)
var CorrectedAngle = (9 * Pi/800) * AngleCGFloat - (Pi/2) //just some math to make it look right on the display
return CorrectedAngle
}
var RPMPercentageValue: Int {
var correctedValue = (0.55) * Float(RPMPointerAngleInt) + 55
return Int(correctedValue)
}
override func drawRect(rect: CGRect)
{
let RPMPointerPath = UIBezierPath()
RPMPointerPath.moveToPoint(RPMPointer1)
RPMPointerPath.addLineToPoint(RPMPointer2)
RPMPointerPath.addLineToPoint(RPMPointer3)
RPMPointerPath.addLineToPoint(RPMPointer1)
whiteColor.set()
RPMPointerPath.stroke()
RPMPointerPath.fill()
//here is the troublemaker
let RPMdisplaylabel = UILabel(frame: CGRectMake(0, 0, 81, 32))
RPMdisplaylabel.center = RPMdisplayLocation
RPMdisplaylabel.textAlignment = NSTextAlignment.Right
RPMdisplaylabel.text = "\(RPMPercentageValue)%"
RPMdisplaylabel.textColor = UIColor.whiteColor()
RPMdisplaylabel.font = UIFont(name: "HelveticaNeue",
size: 27.0)
self.addSubview(RPMdisplaylabel)
}
Le pointeur fonctionne parfaitement. Aucune plainte. Mais le texte se dessine juste à chaque fois que je déplace le curseur. Y a-t-il une astuce distincte pour UILabels dans la partie DrawRect? Merci!
Merci @matt. J'ai essayé de le déplacer en dehors du 'DrawRect' dans le code UIView, mais quand je le fais, j'obtiens une erreur la première fois que j'essaie de dire' RPMdisplaylabel.center': "Déclaration attendue." – sparrownova
J'ai également essayé de déplacer le tout dans le ViewController mais j'ai le même problème que le problème d'origine avec le texte écrit sur lui-même. – sparrownova
Pouvez-vous offrir une suggestion sur où et comment le déplacer? – sparrownova