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];

更改 backgroundColor 的值在它没有 image 属性时有效。但后来它不再是背景颜色......

4

2 回答 2

0

只是为了更新。
正如 Wain 和 Greg 所建议的,
改变图像本身的不透明度解决了这个问题
只是不知道为什么它在 iOS7 之前并不重要,但在之后很重要,我仍然想知道这可能只是 iOS7 本身的问题。无论如何,虽然我有将近 200 张图片要处理,但最好开始修改它们,而不是等待苹果的答复。
谢谢你的帮助!

于 2013-09-27T16:34:20.030 回答
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 回答