У меня есть собственный подкласс NSView, в котором я рисую горизонтальную линию. У моего NSView есть свойство, называемое lineLength
, которое определяет длину строки.Анимация строки с использованием CALayer в NSView
Я хотел бы вызвать анимацию, которая заставит линию расти. Я использую любой щелчок мышью на представлении в качестве триггера (не обязательно, просто простой способ запуска анимации).
Ну, это не работает. Моя строка не рисуется, так как я добавил уровень CA, и я не понимаю, что происходит. Ясно, что я что-то пропустил.
Что мне делать, чтобы анимировать мою линию?
class myView: NSView
{
var lineLength: CGFloat = 10.0
override func awakeFromNib()
{
super.awakeFromNib()
self.layer = CALayer()
self.wantsLayer = true
self.layer?.display()
}
override func drawRect(dirtyRect: NSRect)
{
super.drawRect(dirtyRect)
// Drawing code here.
let path = NSBezierPath()
path.moveToPoint(NSMakePoint(0.0, 10.0)
path.lineToPoint(NSMakePoint(lineLength, 10.0)
NSColor.blackColor().set()
path.stroke()
}
override func mouseDown(theEvent: NSEvent)
{
let animation:CABasicAnimation = CABasicAnimation()
animation.keyPath = "lineLength";
animation.fromValue = 10;
animation.toValue = 500;
animation.duration = 3;
self.layer!.addAnimation(animation, forKey: "basic");
}
}
Одна из идей заключалась бы в подклассе CALayer и использовании его для рисования. Но я не думаю, что я должен это сделать. Обычно яблоко - это более простые решения.
Благодарим вас за ответ. Я использую Mac OS X и NSView. Изменяет ли что-либо (кроме данных UI)? Я читал, что CALayers меньше поддерживаются на платформе MAC. Кроме того, где я должен поместить код чертежа? Это не работает в drawRect. – John