Animation 卡拉耶';丢失';隐式动画期间从类外设置的值
我有一个CLLayer,在Swift的自定义属性上有一个隐式动画。 在动画期间,我可以从类内部访问属性的插值。但是,当我使用从类外部设置的其他属性时,它们在动画期间没有值。动画结束后,原始值再次可用 因此,在下面的示例中,people有五个随机值,它们以drawInContext格式打印到控制台,但是当动画运行时,people是空的 这是我的定制卡莱耶Animation 卡拉耶';丢失';隐式动画期间从类外设置的值,animation,swift,calayer,Animation,Swift,Calayer,我有一个CLLayer,在Swift的自定义属性上有一个隐式动画。 在动画期间,我可以从类内部访问属性的插值。但是,当我使用从类外部设置的其他属性时,它们在动画期间没有值。动画结束后,原始值再次可用 因此,在下面的示例中,people有五个随机值,它们以drawInContext格式打印到控制台,但是当动画运行时,people是空的 这是我的定制卡莱耶 class BackgroundLayer: CALayer { @NSManaged var range: Double v
class BackgroundLayer: CALayer {
@NSManaged var range: Double
var people: []
override class func needsDisplayForKey(key: String) -> Bool {
if key == "range" {
return true
}
return super.needsDisplayForKey(key)
}
override func drawInContext(ctx: CGContext!) {
let center = CGPoint(x: Double(bounds.width)/2, y: Double(bounds.height)-bottomOffset)
let xDist = Double(bounds.width)
let yDist = Double(bounds.height)-bottomOffset-minRadius
let maxDistance = sqrt(pow(xDist,2) + pow(yDist,2))
let radius = CGFloat(minRadius + range * maxDistance)
CGContextSetFillColorWithColor(ctx, UIColor(red: 208/255, green: 2/255, blue: 27/255, alpha: 1).CGColor)
CGContextFillEllipseInRect(ctx, CGRectMake(center.x-radius, center.y-radius, radius*2, radius*2))
println("are there people? \(people)")
}
override func actionForKey(event: String!) -> CAAction! {
if event == "range" {
var currentValue = self.presentationLayer().valueForKey(event) as Double
if currentValue == 0 {
currentValue = self.range
}
var rangeAnim = CABasicAnimation(keyPath: event)
rangeAnim?.fromValue = currentValue
rangeAnim?.duration = 0.5
return rangeAnim
}
return super.actionForKey(event)
}
}
这就是我在UIViewController中使用它的方式,它设置了五个随机值
class ViewController: UIViewController {
private let backgroundLayer = BackgroundLayer()
override func viewDidLoad() {
super.viewDidLoad()
for index in 0..<5 {
println()
let point = (x: Double(arc4random_uniform(UInt32(view.frame.width))), y: Double(arc4random_uniform(UInt32(view.frame.height))))
backgroundLayer.people.append(point)
}
println(backgroundLayer.people)
}
override func viewWillLayoutSubviews() {
backgroundLayer.contentsScale = UIScreen.mainScreen().scale
backgroundLayer.frame = self.view.frame
self.view.layer.addSublayer(backgroundLayer)
backgroundLayer.setNeedsDisplay()
}
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
backgroundLayer.range = 1
}
override func touchesEnded(touches: NSSet, withEvent event: UIEvent) {
backgroundLayer.range = 0
}
}
类ViewController:UIViewController{
私人出租背景层=背景层()
重写func viewDidLoad(){
super.viewDidLoad()
对于0中的索引。。