gpt4 book ai didi

ios - 以编程方式删除 UIButton 背景颜色

转载 作者:行者123 更新时间:2023-11-29 12:51:13 25 4
gpt4 key购买 nike

我在 ios 7 中遇到自定义 UIButton 子类的问题。我想做的是将按钮添加到 nib 文件并在界面生成器中设置其背景颜色。在 IB 中,我将其类设置为自定义 UIButton 子类:MyShapeButton。然后,使用我的 UIButton 子类 (MyShapeButton) 中的 drawRect() 函数绘制一个自定义按钮形状,该形状填充了该背景色。我可以让所有这些工作正常,但真正的问题是我无法从按钮中删除原始背景颜色,使其透明。所以。我的形状已绘制,但原始背景颜色遮盖了它。

请注意以下事项:我的按钮类型设置为自定义,因为其他 SO 帖子说这很重要。它没有帮助。

这是来 self 的子类的 drawRect 代码:

- (void)drawRect:(CGRect)rect
{
UIColor* buttonColor = self.backgroundColor;

//========= this doesn't work =========
[self setBackgroundColor:[UIColor clearColor]];


CGFloat width = rect.size.width;
CGFloat height = rect.size.height;
CGFloat radius = 10;
// Drawing code
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextMoveToPoint(context, 0, height); //bottom left
CGContextAddLineToPoint(context, 0, radius);
CGContextAddArcToPoint(context, 0, 0, radius, 0, radius);
CGContextAddLineToPoint(context, width, 0);
CGContextAddLineToPoint(context, width, height-radius);
CGContextAddArcToPoint(context, width, height, width-radius, height, radius);
CGContextAddLineToPoint(context, 0, height);

//shape is drawn here, but you can't see it:
CGContextSetFillColorWithColor(context, buttonColor.CGColor);

//uncomment this to see the button shape
//CGContextSetFillColorWithColor(context, [UIColor greenColor].CGColor);

CGContextFillPath(context);
}

更新:这里是 drawRect() 的工作代码:

- (void)drawRect:(CGRect)rect
{
CGFloat radius = 10.f;
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds byRoundingCorners:UIRectCornerTopLeft | UIRectCornerBottomRight
cornerRadii:CGSizeMake(radius, radius)];
CAShapeLayer *maskLayer = [CAShapeLayer layer];
maskLayer.frame = self.bounds;
maskLayer.path = maskPath.CGPath;
self.layer.mask = maskLayer;
}

最佳答案

我认为您应该使用另一个带有贝塞尔曲线路径的 CALayer 作为蒙版来裁剪按钮背景。看这里的例子

关于ios - 以编程方式删除 UIButton 背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22389187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com