如何使UIButton正确使用蒙版图像?

时间:2010-10-06 09:42:35

标签: iphone uiimage uibutton image-manipulation

我正在以编程方式创建一个UIButton,然后使用setImage添加一个蒙版图像:

CGRect photoFrame = CGRectMake(11, 11, 180, 120);
UIButton *cardPhotoButton = [[UIButton alloc] initWithFrame:photoFrame];
cardPhotoButton.backgroundColor = [UIColor clearColor];

UIImage *cardPhoto = [[UIImage alloc] init];
cardPhoto = [self maskImage:
[UIImage imageNamed:[metaDict objectForKey:@"Photo"]] withMask:[UIImage imageNamed:@"CardPhotoFrame.png"]];

[cardPhotoButton setImage:cardPhoto forState:UIControlStateNormal];

cardPhotoButton.contentMode = UIViewContentModeScaleAspectFit;

[self addSubview:cardPhotoButton];

使用我从网上获得的这种方法完成了屏蔽:

- (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage {

    CGImageRef maskRef = maskImage.CGImage; 

    CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
                                        CGImageGetHeight(maskRef),
                                        CGImageGetBitsPerComponent(maskRef),
                                        CGImageGetBitsPerPixel(maskRef),
                                        CGImageGetBytesPerRow(maskRef),
                                        CGImageGetDataProvider(maskRef), NULL, false);

    CGImageRef masked = CGImageCreateWithMask([image CGImage], mask);
    return [UIImage imageWithCGImage:masked];
}

现在,问题是默认状态的屏蔽不起作用,但奇怪的是当我实际点击按钮并且按钮进入“突出显示”状态时,屏蔽图像的透明部分开始工作。 / p>

我猜我需要在某处将某种BG颜色设置为clearColor,但我已经尝试了所有这些并且都没有效果。

我可能缺少什么想法?

2 个答案:

答案 0 :(得分:1)

你的实际要求是什么?你想要正常和高亮状态的不同图像或图像大小不适合按钮吗?

如果问题是图像不合适,那么原因是您需要将按钮的类型设置为自定义类型。

答案 1 :(得分:0)

你可以使用:OBShapedButton,https://github.com/ole/OBShapedButton

OBShapedButton是一个针对非矩形按钮形状优化的UIButton子类。 OBShapedButton的实例仅响应分配给UIControlStateNormal按钮的图像不透明的区域中的触摸。

我从这个问题得到了这个答案:How Do I Create a Circular UIButton?

它对我来说很完美:))