1

iOS7 より前は、このようなコードは UIImageView のサブクラスで正常に機能していました。しかし、もう機能していません。

-(id) initWithFrame:(CGRect) frame{
    self = [super initWithFrame:frame];
    if(self){
        self.backgroundColor = [UIColor redColor];
    }
    return self;
}

これもInterfaceBuilderで確認しました。
繰り返しますが、UIImageView の backgroundColor の値は何も変更しません...
これらはすべて UIView で機能します...
それで、その UIImageView はどうなりましたか? それはまだ UIView のサブクラスではありませんか?
または、このプロパティは iOS7 から無効になっていますか? または、これを機能させるために何かを設定する必要がある新しいプロパティはありますか?

おそらく、このコードは問題をよりよく説明しています:

UIImageView *imageView =[ [UIImageView alloc] initWithImage:[UIImage imageNamed:@"ImageName.png"];
imageView.backgroundColor = [UIColor redColor];

image プロパティがない場合は、backgroundColor の値を変更すると機能します。しかし、それはもはや背景色ではありません...

4

2 に答える 2

0

UIImageView が .xib/.storyboard から来ている場合は、initWithCoder:代わりに呼び出されますinitWithFrame:。例として、この小さな UIImageView サブクラスをまとめてから、ストーリーボード内のビュー コントローラーのビューにコンテンツを中央に配置した TestImageView を配置します。TestImageView の背景色は、ストーリーボードで赤に設定されています。

@implementation TestImageView

- (id)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        self.backgroundColor = [UIColor blueColor];
    }
    return self;
}

- (id)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
    if (self) {
        self.backgroundColor = [UIColor greenColor];
    }
    return self;
}

- (void)setBackgroundColor:(UIColor *)backgroundColor {
    NSLog(@"setting background color to %@", backgroundColor);
    [super setBackgroundColor:backgroundColor];
}

@end

アプリを実行すると、次の出力が作成されました。

setting background color to UIDeviceRGBColorSpace 1 0 0 1
setting background color to UIDeviceRGBColorSpace 0 1 0 1

そして、これは画面上で:

ここに画像の説明を入力

ご覧のとおり、setBackgroundColor は最初にストーリーボードの赤色で呼び出され (これは で発生し[super initWithCoder:aDecoder]ます)、次に initWithCoder の緑色で呼び出されます。

于 2013-09-26T20:22:52.020 に答える
0

更新のためだけに。
Wain と Greg の両方が示唆したよう
に、画像自体の不透明度を変更することで問題が解決しました
なぜ iOS7 以前は問題にならなかったのに、iOS7 以降は問題になったのかはわかりませんが、iOS7 自体の問題なのかもしれません。とにかく、作業する画像が 200 近くありますが、Apple の回答を待つよりも、それらを修正し始める方がよいでしょう。
助けてくれてありがとう!

于 2013-09-27T16:34:20.030 に答える