我有一个名为MyImage的自定义类继承自UIImage。现在我有一个UIImage对象,有没有办法将它转换为MyImage对象?
更新
很抱歉不清楚。
我无法使用类别,因为我需要向我的班级添加新属性。
我想要完成的是让我的MyImage对象指向原始的UIImage对象。
更新2
我试过这样的事情:
- (MyImage*)initWithUIImage:(UIImage *)image {
if (self = [super init]) {
self = image;
}
return self;
}
显然它不起作用。
另外,由于UIImage没有名为'initWithImage:(UIImage *)'的方法,我不能写像
myImage = [[MyImage alloc] initWithImage:uiImage];
我也试过
self = [image copy]
但是返回值仍然是UIImage对象,而不是MyImage对象。
更新3
在MyImage中,我需要添加3个属性:url,width和height。由于我正在编写即时消息应用程序,并且在收到新的图像消息时,我只有其网址,宽度和高度。然后我将它们分配给MyImage对象,并在后台下载图像。
现在给出一个原始的UIImage A,我想创建一个新的MyImage对象B,它指向与A相同的图像,但是这些新属性未分配。然后我手动将URL,宽度和高度分配给B。
到@rmaddy,你能告诉我如何编写方法
[[MyImage alloc] initWithImage:(UIImage*)]
我可以提出的一种方法是首先将UIImage对象转换为NSData,然后使用
[MyImage imageWithData:]
有更好的方法吗?
答案 0 :(得分:0)
我不一定建议将其作为解决方案,但确实有办法完全按照您的要求进行操作。它被称为ISA Swizzling。可以把它想象为方法调配,但是对于类而不是方法。
看看Objective-C运行时object_setClass
[link]
我不会进入它(有更好的资源),但这实际上是KVO的工作方式。无论如何,如果您更好地描述UIImage
子类的功能将会有所帮助,以便我们可以帮助描述为什么rmaddy描述的自定义初始化程序可能是最佳解决方案。
答案 1 :(得分:0)
您的MyImage
类是UIImage
的子类,因此,如果您要创建新实例,则还需要正确初始化超类。 UIImage
没有提供从另一个UIImage
实例执行此操作的方法,但您可以使用CGImage
,并且可以从现有图像中获取其中一个。{1}}。所以这样做:
- (MyImage*)initWithUIImage:(UIImage *)image {
if (self = [super initWithCGImage:image.CGImage]) {
// put any necessary MyImage-specific stuff here
}
return self;
}