4

このコードを使用して画像を正しく拡大していますが、iOS5.1ではクラッシュします。resizingModeを最後から削除すると、機能しますが、画像は並べて表示され、面白く見えます。なぜクラッシュするのか、何か考えはありますか?

ありがとう

self.scrollViewImage.image = [[UIImage imageNamed:@"SysInfoBackBox"] resizableImageWithCapInsets:UIEdgeInsetsMake(40, 40, 40, 40) resizingMode:UIImageResizingModeStretch];
4

3 に答える 3

11

これはiOS6.0で導入された新しい方法であり、以前のバージョンではサポートされていません。以前のバージョンでコードを実行する場合は、実行時にUIImageインスタンスがそのメソッドのセレクターに応答するかどうかを確認し、応答しない場合は代替を実装する必要があります。

if ([UIImage instancesRespondToSelector:@selector(resizableImageWithCapInsets:resizingMode:)]) {
    self.scrollViewImage.image = [[UIImage imageNamed:@"SysInfoBackBox"] resizableImageWithCapInsets:UIEdgeInsetsMake(40, 40, 40, 40) resizingMode:UIImageResizingModeStretch];
} else {
    // alternative
}
于 2012-09-13T21:23:51.590 に答える
4

この関数 resizableImageWithCapInsets:resizingMode: はios5.0(> = 6.0のみ)では機能しませんが resizableImageWithCapInsets: 、使用してみてください。たぶん、簡単な交換があなたを助けることができます。

于 2012-12-11T12:01:46.163 に答える
-2

私はあなたの問題に関連しているはずの別の質問にリプレイしましたhttps://stackoverflow.com/a/14623534/2028575

しかし、あなたが好きなら、私はここに正しい答えを置くことができます:

これは、次のように作成されたUIImageを表示するUIImageViewのサイズを変更するiOS5.xを搭載したデバイスでのみ発生していました。

    UIEdgeInsets edgeInsets = UIEdgeInsetsMake(topCapHeight, leftCapWidth, topCapHeight, leftCapWidth);
    image = [originalImage resizableImageWithCapInsets:edgeInsets];

これはおそらくiOS6.xで修正されたiOSのバグです

ミラー基準を使用して画像のサイズを変更する場合は、次のように使用できます。

UIImageのカテゴリを作成し、次のインスタンスメソッドを追加します。

- (UIImage*)resizableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight </b>
{
    UIImage *image = nil;    
    float osVersion = [[[UIDevice currentDevice] systemVersion] floatValue];
    if (osVersion < 6.0) {
        image = [self stretchableImageWithLeftCapWidth:leftCapWidth topCapHeight:topCapHeight];
    } else {
        UIEdgeInsets edgeInsets = UIEdgeInsetsMake(topCapHeight, leftCapWidth, topCapHeight, leftCapWidth);
        image = [self resizableImageWithCapInsets:edgeInsets];
    }
    return image;
}

方法: - (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight

iOSのドキュメントでは非推奨になっていますが、フレームワークでは廃止されています。つまり、iOS5.xのデバイスでアプリを問題なく実行し、iOS6以降のデバイスでサポートされている新しい方法を使用する場合に使用できます。 。

于 2013-01-31T12:15:41.613 に答える