我的应用程序有三个嵌套视图,这些视图在机械上很重要,但没有可视元素:
主持CALayers的UIView是UIImageView的兄弟,它是一个背景图像,用于绘制CALayers。
我真的想确保这些空的UIViews都没有任何与它们相关联的绘图或合成开销(在时间或存储方面),或者如果不可能,则将此开销尽可能小,并且理解它,以便我可以决定是否应该尝试不同的方法。
在界面构建器中,我已将所有视图设置为在绘制之前不清除其上下文。我没有将它们设置为不透明,因为它们绝对不是不透明的 - 它们是完全透明的。我发现我需要给滚动视图内容一个透明的清晰颜色(再次在IB中通过将背景颜色的不透明度设置为零),这表明它正在绘制,我不想要。
所以,简而言之,我不太了解什么是和不是被绘制(任何人都知道像Quartz Debug for iPhone / simulator这样的工具?),或者如何阻止绘制内容
建议非常欢迎!谢谢,Benjohn
答案 0 :(得分:1)
除了我不能说的UIScrollView之外,除非您手动调用setNeedsDisplay或将其图层的needsDisplayOnBoundsChange属性设置为YES,否则您的其他视图不应该有很多绘制开销。视图绘制一次并在那时将其层缓存在GPU上。重绘是很昂贵的,但只有通过上述方法手动触发它才会发生。这些视图和图层将使用内存,因此这是一个问题,特别是如果封闭视图变得非常大(特别是在2048 x 2048纹理限制大小附近)。不幸的是,你无能为力。
作为一个建议,如果您所做的只是旋转和缩放三维图层,我可能会建议您查看我为编写三维旋转和缩放而编写的some sample code iPhone使用Core Animation。它基于Bill Dudney编写的code,其中触摸事件被处理为单点触摸移动和双指捏合手势,然后用于操纵3D中的层。这可以通过消除对UIScrollView和自定义内容视图的需求来简化代码。
答案 1 :(得分:0)
实际上,您可以使用带有核心动画工具的乐器来查看正在绘制的内容(确保在退出前禁用闪烁,因为它是您设备上的全局设置)。