背景
我有一个视图层次结构:
...在UI预览中看起来像这样:
每个按钮由一个图标(“图像”属性)和一个背景图像(“背景”属性)组成。背景图像基本上是一个可调整大小的斜角框架,它与底层UIImageView(ButtonPanel)相结合,使按钮具有最终外观。
然后我在自定义segue(通向此控制器)中有一段代码,它在控制器的视图层次结构中的索引0处插入一个屏幕大小的视图:
background.tag = NSIntegerMax;
[[self.destinationViewController view] insertSubview:background atIndex:0];
现在这已经运行良好且没有任何问题......直到我将架构更改为包含arm64(64位)并在64位设备上运行它。
问题
在64位系统上运行应用程序时,会发生以下情况:
以下是一些说明问题的图片:
(只有中间按钮可见)
(与上面相同,但ButtonPanel垂直偏移-19点)
更多信息
为了关闭错误的根源,我们采取了以下步骤:
其他可能相关的细节:
更新(2015-03-16)
我现在找到了问题的根源。引用代码中的“background”变量实际上是一个UIImageView,其image属性是使用渲染的屏幕截图设置的。屏幕截图使用以下方法呈现:
- (UIImage*) createImageOfView:(UIView*)view withSize:(CGSize)size {
UIGraphicsBeginImageContextWithOptions(size, [view isOpaque], view.window.screen.scale);
CGContextRef const context = UIGraphicsGetCurrentContext();
[view.layer renderInContext:context];
UIImage* const image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
我已经确定整个问题与在此方法中调用UIGraphicsBeginImageContextWithOptions有关。 但只有在包含图像的UIImageView插入到视图层次结构中时才会发生这种情况(即只是渲染截图不会导致问题。)
我现在尝试从资产cataglog分配图像,并出现同样的问题。因此,只有当UIImageView的图像属性为零时,一切都按预期工作;将image属性设置为任何有效图像会引入问题。
答案 0 :(得分:0)
现在已经解决了!总共10个小时后...... 无论如何,这里发生了什么。
插入的背景视图在插入问题中提到的视图层次结构之前,参与了自定义的segue动画。这个动画是一个水平翻转"。但是,我忘了重置用于此转换的转换。因此,背景视图的有效宽度基本为零(2.84217e-14)。将宽度为零的视图插入到视图层次结构中显然会导致64位体系结构出现奇怪的行为。
最初我试图强制改变框架,但是当框架没有响应时,它引导我的想法转换动画。因此,解决了整个问题的是在最终动画完成块中添加以下代码行:
fromView.layer.transform = CATransform3DIdentity;
toView.layer.transform = CATransform3DIdentity;
... fromView是"背景"从上面看。