- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
前言,这不是我在屏幕外丢失 View ,因为我做错了转换,这更奇怪。
问题是,如果我使用 .m34 转换来实现我需要的透视图, View 层次结构会中断,但删除转换后它会正确绘制所有内容。
这是一个例子。
我有一个背景图像 (subviewOne)、一个菜单 (subviewTwo) 和一个位于我将 CATransform3D 应用于 (subviewThree) 的所有对象之上的对象。
简单代码:
CALayer *layer = subviewThree.layer;
CATransform3D perspectiveTransform = CATransform3DIdentity;
perspectiveTransform.m34 = -1.0 / 500;
layer.transform = perspectiveTransform;
在应用此代码之前, View 层次结构在 iOS 5 上仍然存在:
(bottom to top)
subviewOne->subviewTwo->subviewThree
应用后,我得到:
(bottom to top still)
subviewTwo->subviewOne->subviewThree
现在,subviewThree 仍然应用了透视变换,并且位于正确的位置,位于其他所有内容之上,与 iOS5 相同。但是,Menu/subviewTwo 现在被背景图像/subviewOne 隐藏了,我做任何事情都无法将其绘制在 subviewOne 之上。再多的 insertSubviewAtIndex:、bringSubviewToFront、sendSubviewToBack 等,也无法使 View 正确绘制。
这非常奇特,尤其是因为乱序绘制的 View 没有应用了任何类型的 CATransform3D。
我已经在两个不同的应用程序和多个设备 6 台设备中独立验证了这一点。 iOS5 可以正确绘制所有内容,如果我删除那四行,则可以正确绘制所有内容,但我在 iOS 6 上尝试过的任何内容都无法阻止 .m34 破坏 View 顺序。它并不总是像我提供的示例那样简单,但这是我见过的最明显的案例。
有没有其他人遇到过这个问题,解决过这个问题?
编辑:评论的更多信息。
是的,额外的 * 打字错误。
图中有一个 Imageview、QuadCurve Menu 和 Textview。
我在 viewDidLoad 中使用 .m34 调用该方法,但很快就将其交换到 viewDidAppear 以供您检查。
没关系。不要误会我的意思, subview 在您调用时以正确的顺序列出
NSLog(@"%@", [self.view.subviews description]);
它们只是没有正确地绘制在屏幕上。
无奈之下,我写了一些疯狂的怪异代码,我发现了以下内容。
我可以延迟 10 秒调用绘制菜单的方法,
[self performSelector:@selector(createQuadCurveMenu) withObject:nil afterDelay:10];
结束于
[self.view addSubview:menu]
还有一个完全多余的
[self.view bringSubviewToFront:menu]
它仍然绘制在 imageView 后面,该 imageView 被设置为 .xib 中的最低 subview 。
我已经通过两种方式验证了这一点。我可以进入 .xib 并将 imageView 设置为隐藏,然后再次运行我可以看到菜单,现在 imageView 没有覆盖它。我也可以只注释掉将 .m34 转换应用于 textView 的代码,然后菜单再次正确显示在 imageView 的顶部。同样,这一切都不会发生在 iOS5 和 iOS4 上。
此时,我开始认为这是 iOS6 本身的一个错误,一直在等待 NDA 到期,所以我可以在这里问一下是否有其他人遇到过。
最佳答案
很确定这是一个 iOS 6 错误:我在这里写了一篇关于它的博客:iOS 6 Rendering Bug: 3D-Rotation Causes Layers to Render Without Respect for View Hierarchy .
好消息:您可以通过在受影响的图层上设置 zPositions 来解决该错误:按 View 层次结构的递增顺序设置 zPositions。所以如果我没理解错的话,你想要:
subviewOne.layer.zPosition = 0;
subviewTwo.layer.zPosition = 1000;
subviewThree.layer.zPosition = 2000;
查看博客了解更多信息,包括指向我在 Apple 记录的漏洞的 Open Radar 版本的链接。
此外,这可能被认为是这篇文章的重复:iOS 6 view hierarchy nightmare .它具有相同的错误源和解决方案,尽管你们描述的症状不同。
关于iphone - 修改后的 .m34 的 CATransform3D 破坏了 iOS 6 中的 View 层次结构/排序,但没有破坏它所应用的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12546308/
我目前正在尝试基于哈希表构建字典。逻辑是:有一个名为 HashTable 的结构,其中包含以下内容: HashFunc HashFunc; PrintFunc PrintEntry; CompareF
如果我有一个指向结构/对象的指针,并且该结构/对象包含另外两个指向其他对象的指针,并且我想删除“包含这两个指针的对象而不破坏它所持有的指针”——我该怎么做这样做吗? 指向对象 A 的指针(包含指向对象
像这样的代码 package main import "fmt" type Hello struct { ID int Raw string } type World []*Hell
我有一个采用以下格式的 CSV: Module, Topic, Sub-topic 它需要能够导入到具有以下格式的 MySQL 数据库中: CREATE TABLE `modules` ( `id
通常我使用类似的东西 copy((uint8_t*)&POD, (uint8_t*)(&POD + 1 ), back_inserter(rawData)); copy((uint8_t*)&PODV
错误 : 联合只能在具有兼容列类型的表上执行。 结构(层:字符串,skyward_number:字符串,skyward_points:字符串)<> 结构(skyward_number:字符串,层:字符
我有一个指向结构的指针数组,我正在尝试使用它们进行 while 循环。我对如何准确初始化它并不完全有信心,但我一直这样做: Entry *newEntry = malloc(sizeof(Entry)
我正在学习 C,我的问题可能很愚蠢,但我很困惑。在这样的函数中: int afunction(somevariables) { if (someconditions)
我现在正在做一项编程作业,我并没有真正完全掌握链接,因为我们还没有涉及它。但是我觉得我需要它来做我想做的事情,因为数组还不够 我创建了一个结构,如下 struct node { float coef;
给定以下代码片段: #include #include #define MAX_SIZE 15 typedef struct{ int touchdowns; int intercepti
struct contact list[3]; int checknullarray() { for(int x=0;x<10;x++) { if(strlen(con
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Empty “for” loop in Facebook ajax what does AJAX call
我刚刚在反射器中浏览了一个文件,并在结构构造函数中看到了这个: this = new Binder.SyntaxNodeOrToken(); 我以前从未见过该术语。有人能解释一下这个赋值在 C# 中的
我经常使用字符串常量,例如: DICT_KEY1 = 'DICT_KEY1' DICT_KEY2 = 'DICT_KEY2' ... 很多时候我不介意实际的文字是什么,只要它们是独一无二的并且对人类读
我是 C 的新手,我不明白为什么下面的代码不起作用: typedef struct{ uint8_t a; uint8_t* b; } test_struct; test_struct
您能否制作一个行为类似于内置类之一的结构,您可以在其中直接分配值而无需调用属性? 前任: RoundedDouble count; count = 5; 而不是使用 RoundedDouble cou
这是我的代码: #include typedef struct { const char *description; float value; int age; } swag
在创建嵌套列表时,我认为 R 具有对列表元素有用的命名结构。我有一个列表列表,并希望应用包含在任何列表中的每个向量的函数。 lapply这样做但随后剥离了列表的命名结构。我该怎么办 lapply嵌套列
我正在做一个用于学习目的的个人组织者,我从来没有使用过 XML,所以我不确定我的解决方案是否是最好的。这是我附带的 XML 文件的基本结构:
我是新来的 nosql概念,所以当我开始学习时 PouchDB ,我找到了这个转换表。我的困惑是,如何PouchDB如果可以说我有多个表,是否意味着我需要创建多个数据库?因为根据我在 pouchdb
我是一名优秀的程序员,十分优秀!