- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在drawRect方法内绘制一些形状。
注意:我没有使用 NSViews 或 Layers。
我正在将形状点转换为 3D,然后将它们绘制到屏幕上......但它们缺乏深度。
这是围绕 y 轴旋转 45.0 度绘制的矩形的屏幕截图...但它看起来很平坦
我是否可以设置 NSGraphicsContext 转换,例如:
CATransform3D transform = CATransform3DIdentity;
transform.m34 = 1.0 / -500.0;
或者我需要切换到使用 OpenGL 吗?
谢谢!
最佳答案
我可能是错的,我不是专家,但 CATransform 是核心动画的一部分,它是一个高级绘图框架。当您使用drawRect:
时,您直接使用图形上下文,这是一个低级绘图API(根据Apple的文档,它看起来像Core Graphics(因此drawRect:)正在直接与GPU对话硬件,绕过 OpenGL)。因此,如果你想在drawRect中使用CATransform3D,你需要自己实现核心动画。
但是您可以只挑选您想要的核心动画部分,而不是使用所有内容。例如,您可以创建一个 CALayer 对象(或者可能是 CAShapeLayer),应用变换,并告诉它在您的 drawRect 实现的当前上下文中进行绘制。
尽量避免在drawRect:中创建图层,因为如果可能的话,drawRect:方法应该在几千秒内执行。您可以在第一次绘制时创建图层,但后续绘制应重复使用在先前绘制操作中创建的图层。此外,如果您收到内存不足警告,您应该扔掉所有图层,以便下次绘制时可以重新创建它们。否则,您的应用程序可能会在后台终止,否则它本来可以继续运行,或者甚至可能在应用程序位于前台时崩溃,而不会向用户发出任何错误消息。
或者你可以完全避免drawRect:,并全程使用核心动画。我就是做这个的。如果我需要自定义绘图,我可以对 CALayer 进行子类化。
或者,如果您愿意,您可以使用 OpenGL,这就是核心动画在幕后要做的事情。当您只想做一些基本的事情时,这是很多代码。
关于objective-c - NSGraphicsContext 透视图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23030247/
如何将图形上下文中的绘图作为图像获取? 最佳答案 如果它的图形端口是 CGBitmapContext,您可以从中创建图像。 但这不是您想要依赖的东西。如果上下文的图形端口不是 CGBitmapCont
我正在drawRect方法内绘制一些形状。 注意:我没有使用 NSViews 或 Layers。 我正在将形状点转换为 3D,然后将它们绘制到屏幕上......但它们缺乏深度。 这是围绕 y 轴旋转
我刚刚开始学习 OSX 编程,我偶然发现了一个问题,我不知道是否应该使用 CGContextRef 还是 NSGraphicsContext。 有什么区别? 我几乎不知道 CG 或 NS 之间的区别[
CGContextRef ctx; NSGraphicsContext *nsGraphicsContext; nsGraphicsContext = [NSGraphicsContext graph
我使用[NSGraphicsContext currentContext]获取上下文,如何获取当前应用于它的NSAffineTransform? 我需要这个来实现我自己的转换堆栈,我可以在其中执行 p
所以我尝试使用与 this answer 类似的方法将文本叠加到 PDF 文档上. 我使用一个函数来设置当前的图形上下文,就像它在文档中所说的那样。 let pdfPage: CGPDFPage =
我有一个 CGContext,我可以将其转换为 NSGraphicsContext。我有一个 NSWindow,其中有一个用于上下文的 ClipRect。 我想将 ScrollView 放入上下文中,
在 macOS 10.12 之前,以下代码在后台线程上运行良好: [nsView lockFocusFocus]; ... draw something ... [[NSGraphicsContext
Mac OS X 10.7.4 我正在绘制到通过 +[NSGraphicsContext graphicsContextWithBitmapImageRep:] 创建的屏幕外图形上下文中。 当我使用
我是一名优秀的程序员,十分优秀!