首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >白色背景上透明标题的iOS UIButton

白色背景上透明标题的iOS UIButton
EN

Stack Overflow用户
提问于 2014-05-07 10:20:58
回答 2查看 2.6K关注 0票数 6

我有一个具有透明背景和白色标题的定制UIButton。我正在寻找一个简单的解决方案,以颠倒它的高亮(白色背景和透明标题),因为它是在系统UISegmentedControl上实现的。

在用作CALayer掩码的快照上,有比反转alpha更简单的解决方案吗?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-07 11:09:36

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

这段代码似乎有效:

代码语言:javascript
运行
复制
- (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];
}

顺便说一句,如果您想在一个UIImage中设置UIButton,而不只是将它添加到一个视图中:

代码语言:javascript
运行
复制
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];
票数 5
EN

Stack Overflow用户

发布于 2014-05-07 10:27:28

你可以

代码语言:javascript
运行
复制
-(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 :)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23515100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档