0

アプリが Retina 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];

カテゴリ クラスでデバッグすることで、これが問題であることがわかり、次の 1 行を使用して修正しました。

//removing png extension, if present
imageNameMutable = (NSMutableString *)[imageNameMutable stringByDeletingPathExtension];
NSString *imagePath = [[NSBundle mainBundle] pathForResource:imageNameMutable ofType:@"png"];

似たようなことをしなければならないかもしれません。頑張ってください:)

于 2013-06-12T10:43:26.660 に答える