【发布时间】:2014-08-20 22:19:00
【问题描述】:
我注意到自 beta 5 以来在 OS X 10.10 下隐式动画的一些奇怪行为。 调用动画代理有时会导致应用崩溃。我设置了一个非常简单的自定义视图。这是完整的代码:
import Cocoa
import QuartzCore
class AnimatedView: NSView {
var firstColor: NSColor = NSColor.blackColor() {
didSet {
self.needsDisplay = true
}
}
var secondColor: NSColor = NSColor.whiteColor() {
didSet {
self.needsDisplay = true
}
}
override func drawRect(dirtyRect: NSRect) {
super.drawRect(dirtyRect)
let outerRect = self.bounds
let halfW = outerRect.width / 4.0
let halfH = outerRect.height / 4.0
var innerRect = outerRect
innerRect.inset(dx: halfW, dy: halfH)
self.firstColor.set()
NSRectFill(outerRect)
self.secondColor.set()
NSRectFill(innerRect)
}
override func animationForKey(key: String!) -> AnyObject! {
switch key {
case "firstColor", "secondColor" :
return CABasicAnimation()
default :
return super.animationForKey(key)
}
}
}
如果我尝试为 NSView 的 ans 祖先的属性设置动画,一切都会像魅力一样工作。如:
animView.animator().frame = someFrame
如果我尝试为 AnimatedView 的属性(例如 firstColor 或 secondColor)设置动画:
animView.animator().firstColor = someColor
animView.animator().secondColor = someOtherColor
它因各种错误代码而崩溃(两次尝试之间代码没有变化):
- EXC_BAD_ACCESS(代码=EXC_386_GPFLT)
- EXC_BAD_ACCESS(代码=1,地址=0x...)
- EXC_BAD_ACCESS(代码=2,地址=0x...)(地址通常为 0x0)
没有对象是 Nil(我检查了两次)。
有时它会抱怨 __CFString,有时它只是在没有更改代码的情况下崩溃,但它从不工作......
我认为这是某种错误,但在报告之前我必须确定,也许我忘记了什么。
【问题讨论】: