Es gibt einige Fragen zu drawRect, die mir geholfen haben, aber ich kann meinen Code immer noch nicht zum Laufen bringen.drawRect wird die Anzeige nicht aktualisieren
Ich habe eine einfache Klasse, drawExamples:
class drawExamples: UIView {
var shapePosX : CGFloat = 0
var shapePosY : CGFloat = 0
override init(frame: CGRect) {
super.init(frame: frame)
var time1 = NSTimer.scheduledTimerWithTimeInterval(
1,
target: self,
selector: #selector(update),
userInfo: nil,
repeats: true)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
func update() {
shapePosX = shapePosX + 1
shapePosY = shapePosY + 1
self.setNeedsDisplay()
}
override func drawRect(rect: CGRect) {
super.drawRect(rect)
let context = UIGraphicsGetCurrentContext()
CGContextSetLineWidth(context, 3.0)
CGContextSetStrokeColorWithColor(context, UIColor.purpleColor().CGColor)
CGContextMoveToPoint(context, shapePosX, shapePosY)
CGContextAddLineToPoint(context, shapePosX + 250, shapePosY + 320)
CGContextAddLineToPoint(context, shapePosX + 300, shapePosY + 320)
CGContextSetFillColorWithColor(context,UIColor.purpleColor().CGColor)
CGContextFillPath(context)
}
}
Es zieht den Blick zunächst, aber es wird aktualisiert, nicht immer. Die Update-Funktion läuft gut und die Shape-Positionen werden aktualisiert. Ich nehme an, setNeedsDisplay funktioniert, ich weiß einfach nicht, warum drawRect die von mir eingestellte Form nicht neu zeichnet. drawRect scheint nicht immer wieder nach dem ersten Lauf
Es sieht nicht so aus, als ob Sie einen Rahmen zugewiesen oder Einschränkungen für Ihre Ansicht festgelegt haben, so dass es keine Höhe und Breite hat. – par
Ist das etwas mit Code oder ist es eine Einstellung auf der Constraint-Pin-Sache? Bedeutet das, dass die benutzerdefinierte Klasse das Standard-SKView sein sollte, und wenn ja, warum musste ich diese Einschränkungen nicht festlegen, damit die Shapes angezeigt werden, wenn die benutzerdefinierte Klasse drawExamples war? Sorry für die Fragen, neu zu schnell und mit einer schweren Zeit zu verstehen, alle Teile, die zusammen gehen, damit es funktioniert – Dal
Auto-Layout ist nicht unbedingt das Problem hier. (Sorry @dal) Es könnte ein bisschen tiefer sein - warum benutzt du drawRect() um UIView zu "bewegen"? drawRect() ist normalerweise für Layer-Zeichnungen gedacht, während automatische Layout-Constraints dazu gedacht sind, UIViews - typischerweise Subviews innerhalb einer Superview - zu verschieben. Also meine Frage: Was versuchst du mit dieser Sichtweise zu machen? Ist es eine Unteransicht eines anderen? Ist es ein CAShapeLayer? – dfd