如果应用在 Retina 4 设备上运行,我将使用此 UIImage
类别自动查找正确的资源:
http://www.sourcedrop.net/FY53a14b0127f
如果 UIImage
在 UIView
子类的 init< 中实例化,它会正确找到带有
方法:-568h@2x
后缀的资源
-(id) init{
self = [super init];
if(self){
myButton = [UIButton buttonWithType:UIButtonTypeCustom];
[myButton setImage:[UIImage imageNamed:@"go_back_image"] forState:UIControlStateNormal];
[self addSubview:myButton];
}
}
但是如果 UIImage
在类的 didMoveToSuperView
中实例化,则该类别不会获取该资源:
-(void)didMoveToSuperview{
if(self.superview != nil){
[myButton setImage:[UIImage imageNamed:@"otherImage"] forState:UIControlStateNormal];
[myButton setImage:[UIImage imageNamed:@"otherImageHighlighted"] forState:UIControlStateHighlighted];
}
}
如果 UIImage
是在 didMoveToSuperview
中创建的,则显示正常大小的资源...
有什么想法吗?
最佳答案
尝试在类别代码中使用断点。
我遇到了一个问题,即未选择图像,因为我将图像设置为@“someImage.png”,例如
[myButton setImage:[UIImage imageNamed:@"someImage.png"] forState:UIControlStateNormal];
而不是像这样简单地“someImage”
[myButton setImage:[UIImage imageNamed:@"someImage"] forState:UIControlStateNormal];
通过在类别类中调试发现这是问题,并使用这一行来修复:
//removing png extension, if present
imageNameMutable = (NSMutableString *)[imageNameMutable stringByDeletingPathExtension];
NSString *imagePath = [[NSBundle mainBundle] pathForResource:imageNameMutable ofType:@"png"];
您可能需要做类似的事情。祝你好运:)
关于iphone - UIImage+Retina4 类别如果在 didMoveToSuperview 中使用则不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13515653/