1

我的困境如下:

我有一个 UIImage 的自定义子类(我添加了一些序列化方法,即 initWithCoder、encodeWithCoder),我想将我的自定义子类作为变量应用到 UIImageView,或者至少是 UIImageView 的子类。

如您所知,UIImageView 有一个名为“image”的变量,它的类型为 UIImage。我想用我的子类覆盖这个变量。

我的目标是让 UIimageView 响应 archivedDataWithRootObject 而不会崩溃,并将 encodeWithCoder 消息发送到变量图像。如果有更聪明的方法可以到达那里,我愿意接受建议。

谢谢!

[编辑]我认为一种可能的途径是通过某种类型的铸造......但是:

UIImage *image = [[UIImage alloc] init];
MLImage *mlImage = [[MLImage alloc] init];
mlIamge = (MLImage*)image;

当我在第二行执行后将鼠标悬停在 mlImage 上时,我可以看到它是 MLImage 类型的。但是,即使使用强制转换,在第三行执行 mlImage 之后也会变成 UIImage。我需要做什么才能将图像类型更改为 MLImage?[/编辑]

4

1 回答 1

1

小心你的术语。无法覆盖一个属性——它UIImageView仍然有它自己的image属性,它不会被替换。您正在尝试覆盖访问器-image-setImage:)。

你是对的,铸造是一条更好的路线。但是您的示例有一个问题:该演员表是非法的。当你这样做时[[UIImage alloc] init],你正在创建一个类型为 的对象UIImage。没有什么能改变这一点,包括你的演员。强制转换是一种告诉编译器(在您的情况下)“我知道您认为这UIImage*是,嗯, a UIImage,但它确实是 a MLImage”的一种方式。在这种情况下,这是一个谎言,因为它确实是一个UIImage——你在那里分配了它。

但是,您可以做的是将实际MLImage插入imagea 的属性中UIImageView。例如:

MLImage *myImage = [[MLImage alloc] init];
myView.image = myImage;

然后在其他地方:

MLImage *myImage = (MLImage *)(myView.image);

您将取回您的自定义图像对象。但它必须MLImage首先是一个。

于 2009-08-11T15:09:07.117 回答