在NSView中使用CALayer对线条进行动画处理
我有一个NSView的自定义子类,在其中画一条水平线。 我的NSView有一个名为lineLength
的属性,它定义了行的长度。
我想要触发一个让这条线增长的动画。 我使用任何鼠标点击视图作为触发器(不是强制性的,只是一个简单的方法来启动动画)。
那么,它不起作用。 我的行甚至没有画过,因为我添加了CA Layer,我不明白发生了什么。 显然,我错过了一些东西。
我应该怎么做动画我的线?
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子类化并使用它来绘制。 但我不认为我应该这样做。 通常,苹果作为更简单的解决方案。
您可以将该行作为myView
的变量 - 一个CAShapeLayer。 将其添加为视图图层的子图层。
var yourLineLayer = CAShapeLayer()
// then in your awake..
layer.addSublayer(yourLineLayer)
这条线的绘图代码也会有所不同。 您可以创建路径,但是可以使用该路径设置形状图层。
yourLineLayer.path = path.CGPath()
yourLineLayer.strokeColor = UIColor.blackColor()
yourLineLayer.fillColor = UIColor.clearColor()
您可以将动画添加到该CAShapeLayer。 另外你的动画也没有做任何事情。 以下是制作线条的动画效果。
override func mouseDown(theEvent: NSEvent)
{
let animation = CABasicAnimation(keyPath: "strokeEnd")
animation.fromValue = 0
animation.toValue = 1
animation.duration = 3
yourLineLayer.addAnimation(animation, forKey: "strokeEnd")
}
链接地址: http://www.djcxy.com/p/74201.html