彩色叠加UIButton图像

时间:2012-12-26 17:41:41

标签: iphone objective-c ios ipad

尝试使用颜色覆盖UIButton的{​​{1}}时遇到此问题。

叠加颜色显示在Image

下方

以下是我在Image方法中的代码(我已经将drawRect子类化了):

UIButton

有关如何在(void)drawRect:(CGRect)rect { CGRect bounds = self.imageView.bounds; CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor); CGContextTranslateCTM(context, 0.0, self.imageView.image.size.height); CGContextScaleCTM(context, 1.0, -1.0); CGContextClipToMask(context, bounds, [self.imageView.image CGImage]); CGContextFillRect(context, bounds); }

之上获取红色的任何想法

1 个答案:

答案 0 :(得分:2)

成功使用这个hacky代码:

- (void)drawRect:(CGRect)rect
{
    UIImage* img = [self imageForState:UIControlStateNormal];
    [self setImage:nil forState:UIControlStateNormal];
    CGRect bounds = self.imageView.bounds;
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetFillColorWithColor(context, [UIColor colorWithRed:1 green:0 blue:0 alpha:0.2].CGColor);
    CGContextDrawImage(context, bounds, img.CGImage);
    CGContextFillRect(context, bounds);
}

似乎图像是在drawRect之后绘制的,所以除非你把它设为零,否则它会在你绘制的任何内容之上。

这是解决方案不是最终的。我将根据接下来的内容对其进行编辑。

编辑:正确的解决方案是在图像上添加一个半透明的UIView,如下所示:

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        UIView* tintView = [[UIView alloc] initWithFrame:self.bounds];
        tintView.backgroundColor = [UIColor colorWithRed:1 green:0 blue:0 alpha:0.2];
        tintView.userInteractionEnabled = NO;
        [self addSubview:tintView];
    }
    return self;
}

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self) {
        UIView* tintView = [[UIView alloc] initWithFrame:self.bounds];
        tintView.backgroundColor = [UIColor colorWithRed:1 green:0 blue:0 alpha:0.2];
        tintView.userInteractionEnabled = NO;
        [self addSubview:tintView];
    }
    return self;
}

注意:您应该在UIButton子类中执行此操作。