22

Swift(摘自http://www.raywenderlich.com/发布的《iOS Animations by Tutorials:Chapter 12》一书):

let photoLayer = CALayer()

@IBInspectable
  var image: UIImage! {
    didSet {
      photoLayer.contents = image.CGImage
    }
}

如何在objective-c中实现上述语法?我只知道要设置 photoLayer 和图像的属性,如下所示:

@property (strong, nonatomic) CALayer *photoLayer;
@property (strong, nonatomic) IBInspectable UIImage *image;

但我不知道如何didset{...}使用objective-c语法实现部分,请帮助!

4

2 回答 2

41

覆盖设置器并自己实现设置器。

- (void)setImage:(UIImage *)image {
    if (_image != image) {
        _image = image;
        photoLayer.contents = image.CGImage;
    }
}
于 2015-09-24T08:13:50.273 回答
2

Swift 为此需要特殊的语言特性,因为它的静态特性,不能在运行时进行子类化。

在 Objective-C 中,这不是必需的,因此您没有语言功能。您可以使用键值观察

但是如果观察实例是其属性发生变化的实例,您可以使用@Daij-Djan 提到的子类化来实现。(基本上这就是您在 Swift 中所做的。)此外,在 Objective-C 中,您可以观察不同类的不同实例的属性。

于 2015-09-24T08:20:19.677 回答