【问题标题】:are needsDisplayForKey/actionForKey overrides working correctly?needsDisplayForKey/actionForKey 覆盖是否正常工作?
【发布时间】:2014-07-31 18:17:27
【问题描述】:

我正在尝试将一些在 Objective-C 中工作的代码转换为 Swift。我遇到的问题是 needsDisplayForKey/actionForKey 没有以同样的方式被调用。据我所知,自定义键值没有正确传递。这是我调试它时得到的结果:

默认值:

(String!) event = {
  core = {
    _baseAddress = Builtin.RawPointer = 0x00feee51 "onOrderIn"
    _countAndFlags = 1073741833
    _owner = Some {
      Some = (instance_type = Builtin.RawPointer = 0x01026348 @"onOrderIn")
    }
  }
}

自定义值(传入空字符串):

(String!) event = {
  core = {
    _baseAddress = Builtin.RawPointer = 0x0b418f79
    _countAndFlags = 1073741833
    _owner = Some {
      Some = (instance_type = Builtin.RawPointer = 0x0b418f70 -> 0x006e38f0 (void *)0x006e38c8: __NSCFString)
    }
  }
}

我不确定相关代码可能是什么。我只想问 - 有没有其他人能够在 Swift 中定义自定义的隐式动画?从 Objective C 迁移过来时有什么需要注意的吗?

override class func needsDisplayForKey(key: String!) -> Bool{
    if key == "angleFrom" || key == "angleTo" {
        return true;
    }
    return super.needsDisplayForKey(key)
}

override func actionForKey(event: String!) -> CAAction!{
    if event == "angleFrom" || event == "angleTo" {
        return self.makeAnimationForKey(event)
    }
    return super.actionForKey(event)
}

【问题讨论】:

标签: calayer swift


【解决方案1】:

我在 Swift 中通过在变量声明前使用 @NSManaged 属性(在 Objective-C 中使用 @dynamic 属性)来实现这一点

【讨论】:

  • 谢谢,这对我有用。我使用了问题中描述的覆盖并将我的自定义属性(键)设为@NSManaged。
  • 是的,因为@NSManaged 产生了Objective-C 调用的@dynamic 属性,这意味着没有实现,设置和获取值将在运行时通过KVO 处理,这完全一样CoreGraphics 也需要的属性类型!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-11
相关资源
最近更新 更多