繁体   English   中英

以编程方式为UIButton创建突出显示的状态背景图像

[英]Create highlighted state background image programmatically for UIButton

我使用以下代码以编程方式创建了UIBarButton:

UIButton * rightButton = [UIButton buttonWithType:UIButtonTypeCustom];    
[rightButton setFrame:CGRectMake(0, 0, 81, 30)];
[rightButton setBackgroundColor:[UIColor clearColor]];     
rightButton.layer.borderColor = [UIColor blackColor].CGColor;
rightButton.layer.borderWidth = 0.5f;
rightButton.layer.cornerRadius = 5.0f;
rightButton.titleLabel.font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:12];
[rightButton setTitleShadowColor:[UIColor blackColor] forState:UIControlStateNormal];
[rightButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
//set text according to sign in status
if (signIn) {
    [rightButton setTitle:@"5 votes left" forState:UIControlStateNormal]; 
} else {
    [rightButton setTitle:@"Sign in" forState:UIControlStateNormal];   
}

UIBarButtonItem * rightBarButton = [[UIBarButtonItem alloc] initWithCustomView:rightButton];
self.navigationItem.rightBarButtonItem = rightBarButton;

获得的按钮具有所需的外观,但是现在我需要的是,当按钮的状态突出显示时,应该有一个渐变为黑色的渐变效果,以使用户知道他已经按下了按钮,因为现在当我按下按钮时按钮,视图没有任何反应,因此用户无法知道他已按下按钮。

我想探索一个不涉及为所需状态设置背景图像的选择,因为按钮的文本可以根据应用程序配置动态变化,因此我需要完全通过代码来完成。

尽管这不会直接回答您的问题,但可能会有所帮助。 我必须为按钮动态创建一些图形,并想出了一种使用核心图形创建按钮图像的方法。 它使我可以灵活地在代码中参数化地更改外观,它在抽象的图形上下文中绘制按钮图像,然后将结果转换为可用于按钮的图像。 您可能会从我的解释中得到足够的好处,您可以根据需要自己尝试。

子类化UIButton并添加CALayer或CAGradientLayer以实现所需的突出显示效果。 将高亮层的初始状态设置为隐藏。 覆盖setHighlighted:类似:

- (void) setHighlighted:(BOOL)highlight {
    highlightLayer.hidden = !highlight;
    [super setHighlighted:highlight];
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM