目标c - iOS ui按钮透明标题在白色背景



我有一个透明背景和白色标题的自定义UIButton。我正在寻找一个简单的解决方案来反转它的高光(白色背景和透明标题),因为它是在系统UISegmentedControl上实现的。

是否有更简单的解决方案,而不是在快照上反转alpha用作CALayer掩码?

如果没有,你能告诉我如何反转CALayer α吗?

您可以使用Destination Out作为混合模式在CGContext上绘制文本。

下面的代码似乎可以工作:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor greenColor];
    UIFont* font = [UIFont fontWithName:@"Helvetica-Bold" size:18];
    NSString* buttonText = @"BUTTON";
    CGSize buttonSize =  CGSizeMake(200, 50);
    NSDictionary* textAttributes = @{NSFontAttributeName:font};
    CGSize textSize = [buttonText sizeWithAttributes:textAttributes];
    UIGraphicsBeginImageContextWithOptions(buttonSize, NO, [[UIScreen mainScreen] scale]);
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGContextSetFillColorWithColor(ctx, [UIColor redColor].CGColor);
    UIBezierPath *path = [UIBezierPath bezierPathWithRect:CGRectMake(0, 0, buttonSize.width, buttonSize.height)];
    CGContextAddPath(ctx, path.CGPath);
    CGContextFillPath(ctx);
    CGContextSetBlendMode(ctx, kCGBlendModeDestinationOut);
    CGPoint center = CGPointMake(buttonSize.width/2-textSize.width/2, buttonSize.height/2-textSize.height/2);
    [@"BUTTON" drawAtPoint:center withAttributes:textAttributes];

    UIImage* viewImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    UIImageView* imgView = [[UIImageView alloc] initWithImage:viewImage];
    [self.view addSubview:imgView];
}
顺便说一下,如果你想在UIButton中设置UIImage而不是将其添加到视图中:
UIButton* boton = [[UIButton alloc] initWithFrame:CGRectMake(50, 50, viewImage.size.width, viewImage.size.height)];
[boton setBackgroundColor:[UIColor clearColor]];
[boton setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
boton.titleLabel.font = font;
[boton setTitle:buttonText forState:UIControlStateNormal];
[boton setImage:viewImage forState:UIControlStateHighlighted];
[self.view addSubview:boton];

你可以设置

-(void)viewDidload: {
    [yourButton setTitleColor:(UIColor *)color 
                     forState:UIControlStateHighlighted];
    [yourButton addTarget:self 
                   action:@selector(changeButtonBackGroundColor:) 
         forControlEvents:UIControlEventTouchDown];
}
-(void)changeButtonBackGroundColor:(UIButton *)button {
    [button setBackgroundColor:[UIColor yourColor]];
}

记得把它改成事件:UIControlEventTouchUpInsideUIControlEventTouchOutSide:)

最新更新