如何以编程方式为触摸状态的UIButton创建灰色叠加层?

问题描述 投票:4回答:4

我想创建一个泛型类,当点击时,使元素变灰。

Facebook的应用程序是我想要实现的完美范例。点击时,所有链接和图像都变为灰色。

我只能猜测他们是UIButton的子类。

我已经制作了我的按钮的样式UIButtonTypeCustom摆脱圆形边框。除此之外,我不知道如何使用灰色叠加层,因为我在文档中看不到这样的属性。

iphone ios cocoa-touch user-interface
4个回答
2
投票

这很简单:

#define TAG_GRAYVIEW 5671263 // some random number

// add the gray overlay
UIView *grayView = [[UIView alloc] initWithFrame:button.bounds];
grayView.backgroundColor = [UIColor grayColor];
grayView.tag = TAG_GRAYVIEW; 

[button addSubview:grayView];

// remove the gray overlay
UIView *grayView = [button viewWithTag:TAG_GRAYVIEW];
[grayView removeFromSuperview];

2
投票

我认为你需要使用半透明的灰色图像PNG文件。然后,您需要在Highlighted状态下设置按钮图像。

另请注意,Normal State和Highlighted State的图像都需要带有标题的图像。

一旦我们将图像设置为按钮,就不会显示btn.titleLabel.text

所以你可以在Normal状态下拥有一个带有透明背景和标题的图像。还有一张带有标题的灰色图像,用于Highlighted State。

以编程方式执行的代码是

[btn setImage:@"Transperant.png" forState:UIControlStateNormal];
[btn setImage:@"Grey.png" forState:UIControlStateHighlighted];

希望这对你有所帮助。


0
投票

默认的UIButton使用灰色突出显示屏遮住不透明内容。例如,当使用透明png时,只有包含非透明像素的部分在触摸时才会变灰。默认的UIButton突出显示对子视图/子图层没有影响,并且仅对提供的​​图像有效。你在Facebook应用程序中看到的可能只是UIWebView的亮点,可能是使用css定制的。

要使用您自己的控件创建类似的东西(以防止UIWebView的开销),您应该创建自己的UIControl子类并使用透明的CALayer突出显示触摸的内容。您甚至可以屏蔽CALayer以仅突出显示实际内容,而不是矩形形状。

另请参阅creating custom controls for iOS by subclassing UIControl上的stackoverflow帖子。


0
投票

尝试将按钮设置为这样的东西。 *请注意,我没有为此示例创建图像。

将按钮类型设置为自定义,然后在“状态配置”中选择“突出显示”,您需要将按钮的图像设置为半透明灰色图像。可能还有其他几种方法可以达到同样的效果,但这个方法应该很简单。

© www.soinside.com 2019 - 2024. All rights reserved.