iphone - UIImage+Retina4 类别如果在 didMoveToSuperview 中使用则不起作用

标签 iphone ios uiimage uikit retina-display

如果应用在 Retina 4 设备上运行,我将使用此 UIImage 类别自动查找正确的资源: http://www.sourcedrop.net/FY53a14b0127f

如果 UIImageUIView 子类的 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/

相关文章:

ios - prepareToRecord 崩溃

iphone - UITableView 中图像的圆角矩形/圆角

ios - 如何在应用程序中将图像保存在本地

ios - 将 UIImage 分配给 Collection View 单元格

iphone - 我的 iPhone 应用程序应该使用哪种风格

ios - 在 IOS 中单击时更改按钮文本和背景颜色

ios - MapKit 注释未出现

ios - 如何将 UIColor 值转换为命名颜色字符串?

ios - 动态更改自动布局

iphone - 如何显示来自 url 的图像?