2

我在 iphone 应用程序中有一个自定义视图,当满足条件时,它应该使屏幕变暗并向用户显示一些输入字段。

我没有问题禁用主控件和“调暗”屏幕(只是一个 alpha=0.6 的 UIView),但是我在此之上显示的控件似乎总是有一些透明度(我可以通过UIButton),即使我将控件的 alpha 设置为 1.0 并设置 opaque=YES。我什至尝试在按钮和覆盖层之间放置一个额外的不透明层,它仍然是部分透明的。

供参考:(iOS 6.1)

UIView * overlay = [[UIView alloc] initWithFrame:parentView.frame];
overlay.backgroundColor = [UIColor blackColor];
overlay.alpha=0.6;

UIButton * button = [UIButton buttonWithType:UIButtonRoundedRect];
button.backgroundColor = [UIColor whiteColor];
button.alpha = 1.0;
button.opaque = YES;
[button setTitle:@"done" forState:UIControlStateNormal];
[button setFrame:CGRectMake(0.0,0.0,44.0,44.0)];

[overlay addSubview:button];
[parentView addSubview:overlay];

即使使用上面的代码,按钮也是透明的。有谁知道为什么以及如何使按钮不透明?

4

2 回答 2

4

您可以部分看到的原因UIButton是因为它是覆盖的子视图,UIView其 alpha 为0.6. 你需要做这样的事情:

// Create the overlay view just like you have it...
UIView *overlay = [[UIView alloc] initWithFrame:parentView.frame];
overlay.backgroundColor = [UIColor blackColor];
overlay.alpha = 0.6;

// Continue adding this to the parent view
[parentView addSubview:overlay];

// Create the button
UIButton *button = [UIButton buttonWithType:UIButtonRoundedRect];
button.backgroundColor = [UIColor whiteColor];
[button setTitle:@"Done" forState:UIControlStateNormal];
[button setFrame:CGRectMake(0.0, 0.0, 44.0, 44.0)];

// Add this button directly to the parent view
[parentView addSubview:button];
于 2013-09-16T18:58:13.053 回答
1

我建议使用 opaque 功能,您将获得最佳实践的性能:

  • 使用IB使按钮不透明:选择所需的按钮并在实用程序右侧栏转到属性检查器并在视图部分标记不透明,不要忘记更改背景。

  • 之后,您必须以编程方式更改 UIButton 内标签的不透明:

    yourButtonOutlet.titleLabel.opaque = true;
    yourButtonOutlet.titleLabel.backgroundColor = [UIColor *YOUR DESIRED COLOR*];
    

了解苹果推荐使用不透明来快速渲染。

于 2015-08-11T09:03:51.337 回答