Swift 如何观察UIView不透明度的变化(可能通过其CALayer属性?)
标题是基本问题。试图在视图(s层)上的不透明度更改时获得通知 这是允许的Swift 如何观察UIView不透明度的变化(可能通过其CALayer属性?),swift,uiview,calayer,key-value-observing,Swift,Uiview,Calayer,Key Value Observing,标题是基本问题。试图在视图(s层)上的不透明度更改时获得通知 这是允许的 addedView.addObserver(self, forKeyPath: #keyPath(isHidden), options: [.old, .new], context: nil) 但这并没有编译 addedView.layer.addObserver(self, forKeyPath: #keyPath(opacity), options: [.old, .new], context: nil) 有什么想
addedView.addObserver(self, forKeyPath: #keyPath(isHidden), options: [.old, .new], context: nil)
但这并没有编译
addedView.layer.addObserver(self, forKeyPath: #keyPath(opacity), options: [.old, .new], context: nil)
有什么想法吗?来自:
属性名称必须是对可用属性的引用
在Objective-C运行时中。[……]例如:
// ...
let c = SomeClass(someProperty: 12)
let keyPath = #keyPath(SomeClass.someProperty)
if let value = c.value(forKey: keyPath) {
print(value)
}
在类中使用键路径字符串表达式时,可以
通过只写属性名来引用该类的属性,
没有类名
extension SomeClass {
func getSomeKeyPath() -> String {
return #keyPath(someProperty)
}
}
print(keyPath == c.getSomeKeyPath())
// Prints "true"
因此,实际上,#keyPath(…)
中的属性名通常应该是限定的。除非属性与#keyPath
表达式位于同一类中,否则应使用其封闭类名限定属性名称。这是有意义的,因为编译器如何知道您指的是哪个ishiden
属性
#keyPath(ishiden)
恰好可以工作,因为您在其中编写此代码的类也碰巧有一个ishiden
属性(可能是UIView
子类?)
你应该做:
#keyPath(CALayer.opacity)
对于不透明度
,来自:
属性名称必须是对可用属性的引用
在Objective-C运行时中。[……]例如:
// ...
let c = SomeClass(someProperty: 12)
let keyPath = #keyPath(SomeClass.someProperty)
if let value = c.value(forKey: keyPath) {
print(value)
}
在类中使用键路径字符串表达式时,可以
通过只写属性名来引用该类的属性,
没有类名
extension SomeClass {
func getSomeKeyPath() -> String {
return #keyPath(someProperty)
}
}
print(keyPath == c.getSomeKeyPath())
// Prints "true"
因此,实际上,#keyPath(…)
中的属性名通常应该是限定的。除非属性与#keyPath
表达式位于同一类中,否则应使用其封闭类名限定属性名称。这是有意义的,因为编译器如何知道您指的是哪个ishiden
属性
#keyPath(ishiden)
恰好可以工作,因为您在其中编写此代码的类也碰巧有一个ishiden
属性(可能是UIView
子类?)
你应该做:
#keyPath(CALayer.opacity)
对于
opacity
您在哪里编写代码?您在哪里编写代码?完美!你回答了我的另一个问题。。。为什么,如果它只是一个字符串,那么它的定义在哪里重要吗?现在我知道了,其他人也会知道!谢谢完美的你回答了我的另一个问题。。。为什么,如果它只是一个字符串,那么它的定义在哪里重要吗?现在我知道了,其他人也会知道!谢谢