0

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

如果在子类的方法中实例化,它会正确找到带有-568h@2x后缀的资产:UIImageUIViewinit

-(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则显示正常大小的资产...

有什么想法吗?

4

1 回答 1

1

尝试在类别代码中使用断点。

我遇到了一个没有选择图像的问题,因为我将图像设置为 @"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"];

你可能需要做类似的事情。祝你好运:)

于 2013-06-12T10:43:26.660 回答