iOS7 UIButton图像闪烁

Posted

技术标签:

【中文标题】iOS7 UIButton图像闪烁【英文标题】:iOS7 UIButton image flashes 【发布时间】:2014-05-17 07:31:26 【问题描述】:

我正在使用自定义数字键盘,但 UIButton 的背景图像存在问题。一切似乎都正常工作,但偶尔在推送动画期间,按钮在彼此之间闪烁白色。这最常发生在将视图控制器弹出到带有数字键盘的视图时。当我将其封闭视图的背景颜色更改为像绿色这样的激进颜色时,闪烁是绿色的,所以背景似乎以某种方式显示出来。每次双击主页按钮时,这更加明显和可重复。请查看屏幕截图以了解我执行此操作时的情况。按钮设置如下:

_oneButton = [UIButton buttonWithType:UIButtonTypeCustom];
//rinse and repeat for the rest of the buttons
_nineButton = [UIButton buttonWithType:UIButtonTypeCustom];
_clearButton = [UIButton buttonWithType:UIButtonTypeCustom];

NSArray *allButtons = @[_zeroButton, _oneButton, _twoButton, _threeButton, _fourButton,_fiveButton,_sixButton,_sevenButton,_eightButton,_nineButton, _deleteButton, _clearButton];
[allButtons enumerateObjectsUsingBlock:^(UIButton *button, NSUInteger idx, BOOL *stop) 
    button.tag = idx;
    [button setTitle:@(idx).stringValue forState:UIControlStateNormal];
    [button setBackgroundImage:[[UIImage imageNamed:@"btn-numpad-resizeable.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(1, 1, 1, 1)] forState:UIControlStateNormal];
    [button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
    [self addSubview:button];
];

对于布局,我使用自动布局,这里是布局第一行的示例 sn-p,其余约束遵循类似的格式。

[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_oneButton][_twoButton(==_oneButton)][_threeButton(==_oneButton)]|" options:0
                                                             metrics:nil
                                                               views:NSDictionaryOfVariableBindings(_oneButton,_twoButton,_threeButton)]];

这是运行时的最终结果:

以下是我在主屏幕上双击时发生的情况的图像。一种是直接从应用程序中双击,另一种是不在应用程序中时双击。有趣的是,两者都产生了不同的结果。到目前为止,每次我尝试时,这些结果都是不变的。所以想象一个推动动画,整个数字键盘在屏幕截图的所有三种状态之间切换,这几乎就是我们所看到的。

按照相关性顺序我想到/尝试过的事情:

图像存在某种问题,例如透明度?图像没有透明度,多种尺寸或不同的图像加在一起都会导致相同的问题。可调整大小的图像也不会影响事物。有一个警告,即在代码中创建或作为 png 提供的实体图像不会导致问题。

布局问题?我不这么认为。我已经用自动布局和覆盖 layoutSubviews 编写了这个,它是一样的。我在视图出现后检查了框架,所有视图都按应有的方式堆叠在一起。

视网膜与非视网膜问题?我没有非视网膜设备,无法对此进行测试。 Xcode 5.1 只给了我一个 ios6 非视网膜模拟器,我无法在 iOS6 上重现。

设置背景颜色以匹配按钮的橙色。没用,东西还在闪。

在应用程序处于后台时实现自定义 iOS7 屏幕截图。当从我们的导航控制器进行推送时,这并不能解决问题。

我不知道出了什么问题或如何解决此问题。可能存在已知的错误,但我还没有看到任何东西。有人有什么建议吗?

【问题讨论】:

【参考方案1】:

如果您正在使用 .xib 文件

这里是 XCODE 5 中用于 IOS7 .xib 文件的容器选项,用于设计目的。

转到显示尺寸检查器选项。 去安排 检查是否为您的 UIButton 视图设置了任何容器视图。水平或垂直。如果有请删除。愿你的问题得到解决。

谢谢

【讨论】:

对不起,我应该更清楚一点,这个视图是用代码编写的,它没有使用 nib。【参考方案2】:

我最终找到了一个在大多数情况下都有效的解决方案 - 当我双击主页按钮时,我仍然会看到奇怪的图像,但我认为这是 iOS 中的一个缺陷,因为我注意到每个应用程序中都有类似的伪影。无论如何,最终对我有用的是放弃使用图像作为按钮,而是使用核心图形绘制它们。一切都说完之后,它就变得简单多了,而且我没有 20 多张图像来支持不同设备上的所有按钮状态。至于为什么我首先遇到问题,我仍然不确定,但我认为这可能与我们用于创建按钮的可调整大小的图像有关。

【讨论】:

以上是关于iOS7 UIButton图像闪烁的主要内容,如果未能解决你的问题,请参考以下文章

iOS UIButton图像contentMode在TouchUpInside上闪烁

UITableViewCell 中的 UIButton 在 iOS7 中不起作用

iOS7 AutoLayout UIButton没有收到整个按钮的触摸

使用自动布局创建带有文本和图像的 iOS 7 UIButton

iOS:禁用时的 UIButton 标题颜色

IOS 7按钮图像颜色