|
|
1
38
各种Cocoa引用之间的一些混淆来自于Leopard中引入的层备份视图。在iPhone上,所有uiview都是层备份的,在Leopard视图中,需要手动启用层备份。
对于层备份视图,使用中提供的任何内容绘制一次内容
为了获得最佳性能,建议您避免频繁调用
您所看到的与桌面相关的基于Cocoa的引用可能采用非层备份视图,这些视图称为drawRect:任何时候都需要更新视图,无论是移动、缩放还是部分视图被遮挡。正如我所说的,所有uiview都是分层的,所以iPhone上不是这样。 也就是说,对于绘图应用程序,一种方法是维护一个绘制对象的数组并调用drawRect:每次用户添加新的内容时,按顺序遍历以前绘制的每个对象。我可以建议另一种方法,即为每个绘图操作创建一个新的UIView或CALayer。绘制操作的内容(直线、圆弧、X等)将由单个视图或图层绘制。这样,您就不必在新的触摸屏上重新绘制所有内容,并且可以通过独立地移动每个绘制的元素来进行一些整洁的矢量样式编辑。对于复杂的绘图,这可能会有一点内存折衷,但我敢打赌它会有更好的绘图性能(最小的CPU使用和闪烁)。 |
|
|
2
4
|
|
|
3
2
在拍摄时,一定要准备好画出合适的视野区域
|
|
|
4
2
它意味着使用当前图形上下文堆栈重新绘制传递给您的区域(rect)。再也没有了。
不可以。如果脏区域没有重叠,您可能会收到多个调用
在某些情况下,只要某个部分无效,一个简单的实现就可能(相当懒惰地)使视图的整个rect无效。这通常是不好的,因为它通常需要比需要更多的绘图,并且在视图不是不透明的情况下特别浪费。 AppKit或UIKit则不然。
对于复杂的渲染,可以更容易或更有效地绘制到外部缓冲区(例如位图),然后使用预渲染的位图表示来获取屏幕上的内容
是的,你能做到。具体来说,您可以渲染到外部缓冲区(例如位图),当您完成渲染到位图时,使要绘制的rect无效,然后使用位图中的数据绘制到屏幕上
嗯,你有几个选择。你的提议是一个(假设你在传递给你的rect内绘制)。另一种方法是创建一个“X”视图,只要记住重构视图所需的点就可以了,如果您需要这些X在不同的发布中保持不变的话。在许多情况下,您可以轻松地将复杂问题划分为多个层(简单的2D游戏):
因此,大多数问题都可以很容易地划分,因此您不必一直渲染所有问题。如果做得好,这将降低复杂性并提高性能。如果做得不好,情况可能会更糟。 |
|
|
mikko · SwiftUI如何在不同堆栈中实现同一视图的平滑动画 1 年前 |
|
|
routern · 如何组合contextMenu和圆角矩形? 1 年前 |
|
|
DevHome98 · 3D触摸不适用于设备swift 2 年前 |
|
|
dunoiww · 从全屏返回时如何触发onAppear 2 年前 |
|
|
Community wiki · iPhone上ivar的继承问题 2 年前 |
|
|
Community wiki · 查找iOS日历 3 年前 |
|
|
Community wiki · 有效的IPhone编程技术[关闭] 3 年前 |