gpt4 book ai didi

animation - swift : animator() causes EXC_BAD_ACCESS

转载 作者:搜寻专家 更新时间:2023-10-31 21:58:42 40 4
gpt4 key购买 nike

自 beta 5 以来,我注意到在 OS X 10.10 下隐式动画有一些奇怪的行为。调用动画代理有时会导致应用程序崩溃。我设置了一个非常简单的自定义 View 。这是完整的代码:

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 (code=2, address=0x...)(地址通常为 0x0)

没有对象是 Nil(我检查了两次)。

有时它会提示 __CFString,有时它只是在没有更改代码的情况下崩溃,但它永远不会工作...

我认为这是某种错误,但在报告之前我必须确定,也许我忘记了什么。

最佳答案

重新阅读发行说明,注意到动态关键字,对其进行了测试,有效!因此,如果您想为自定义属性设置动画,则必须在属性声明中使用 dynamic 关键字:

dynamic var firstColor: NSColor = NSColor.blackColor() {
didSet {
self.needsDisplay = true
}
}

dynamic var secondColor: NSColor = NSColor.whiteColor() {
didSet {
self.needsDisplay = true
}
}

我不知道为什么它在 beta 5 之前有效,我不知道它是否是一个临时的解决方法,或者它是否是正常的使用方式,但它确实有效.

关于animation - swift : animator() causes EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25406355/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com