我正在以编程方式创建一个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,但我已经尝试了所有这些并且都没有效果。
我可能缺少什么想法?
答案 0 :(得分:1)
你的实际要求是什么?你想要正常和高亮状态的不同图像或图像大小不适合按钮吗?
如果问题是图像不合适,那么原因是您需要将按钮的类型设置为自定义类型。
答案 1 :(得分:0)
你可以使用:OBShapedButton,https://github.com/ole/OBShapedButton
OBShapedButton是一个针对非矩形按钮形状优化的UIButton子类。 OBShapedButton的实例仅响应分配给UIControlStateNormal按钮的图像不透明的区域中的触摸。
我从这个问题得到了这个答案:How Do I Create a Circular UIButton?
它对我来说很完美:))