iOS7 UIButton图像闪烁

时间:2014-05-17 07:31:26

标签: ios cocoa-touch uibutton

我正在使用自定义数字键盘,并且UIButtons的背景图片存在问题。一切似乎都应该工作,但偶尔在推动动画期间,按钮在彼此之间闪烁白色。当使用数字键盘将视图控制器弹出到视图时,通常会发生这种情况。当我将其封闭视图的背景颜色更改为像绿色这样的基本颜色时,闪烁是绿色的,所以看起来某种程度上背景显示出来。每次双击主页按钮,这一点就更加明显和可重复。请参阅屏幕截图,以获取我做这些事情时的样子参考。按钮设置如下:

_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];
}];

对于布局我使用autolayout,这是一个布局第一行的示例片段,其余约束遵循类似的格式。

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

以下是运行时的最终结果:

result of numpad running

以下是我在主屏幕上双击时会发生什么的图像。一个是从应用程序直接双击,另一个是不在应用程序时双击。有趣的是,两者都会产生不同的结果。每次尝试时,这些结果都是恒定的。因此,想象一下推送动画,整个数字键盘在屏幕截图的所有三种状态之间切换,这几乎就是我们所看到的。 enter image description here enter image description here

我按照相关性的顺序考虑/尝试的事情:

  • 像透明图像这样的问题?图像中没有透明度,并且多个尺寸或差异图像全部一起导致相同的问题。可调整大小的图像也不会影响事物。有一点需要注意,那就是在代码中创建的实体图像,或者提供的图像不会导致问题。

  • 布局问题?我不这么认为。我用autolayout和覆盖layoutSubviews写了这个,它也是一样的。我在视图显示后检查了框架,并且所有视图都按照应有的方式堆叠在一起。

  • 视网膜与非视网膜问题?我没有视网膜设备,也无法测试。 Xcode 5.1只给了我一个iOS6非视网膜模拟器,我还没能在iOS6上重现。

  • 设置背景颜色以匹配按钮的橙色。没有工作,事情仍然闪现。

  • 在应用程序背景化时实施自定义iOS7屏幕截图。从导航控制器进行推送时,这不会解决问题。

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

2 个答案:

答案 0 :(得分:0)

如果您正在使用.xib文件

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

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

谢谢

答案 1 :(得分:0)

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