问题标签 [cglayer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
macos - 在 CGL 上下文上绘制 CGImageRef 和 CGBitmapContextRef?
我正在寻找一种在 CGL 上下文上绘制 CGImageref 和 CGBitmapContextRef 的方法?
iphone - 如何在不强制重绘的情况下删除 UIView 子视图?
这在某种程度上是一个假设性的问题,但我可以想象这种情况在未来的某个时候会出现:让我们暂时假设我有一个非常复杂的 UIView 层次结构,我只需要渲染一次。我们还假设,一旦绘制,我就不再使用父视图下的信息(UIImages、标签、自定义视图、坐标等)。这个想法不是保留它们,而是释放它们使用的所有额外内存,同时避免重绘。结果与绘制到屏幕外缓冲区然后将其推送到屏幕上相同。是否可以直接使用 UIView/CGLayer 来实现这一点,或者是将父 CGLayer 的内容转换为 UIImage 的唯一选择?
只是好奇。我想在大多数情况下,保留一些额外视图的开销可以忽略不计,但内存就是内存,除了分配位图之外,我无法在官方文档中找到任何内容。
谢谢!
performance - 将屏幕外 CGLayer 传送到当前上下文时出现锯齿状路径
在我当前的项目中,我需要绘制一个复杂的背景作为一些 UITableView 单元格的背景。由于在单元格的 drawRect: 方法中执行时用于绘制此背景的代码很长且占用大量 CPU 资源,因此我决定仅将其渲染到 CGLayer 一次,然后将其传送到单元格以增强整体性能。
我用来将背景绘制到 CGLayer 的代码:
将图层blit到当前上下文的代码:
这实际上做得很好,但我遇到的唯一问题是圆角(检查静态方法)。闪到屏幕上时非常锯齿。当绘图代码位于其原始位置时,情况并非如此:在 drawRect 方法中。
如何恢复这种抗锯齿功能?
由于某种原因,以下方法对抗锯齿没有任何影响:
提前致谢!
iphone - 如何访问 CGContext 以在屏幕外创建 CGLayer
意图:创建CGLayer
屏幕外,从第二个线程在其上绘制一些复杂的东西,然后在主线程上使用它来快速绘制
问题: CGLayerCreateWithContext(context, size, info)
期望一个已经存在的CGContext
,以便它知道需要优化什么样的上下文。
到目前为止我找到的解决方案: CGContextRef ctx = UIGraphicSetCurrentContext()
但是这个功能似乎不再存在了。
问题:没有其他方法可以访问默认上下文之类的内容吗?还是我真的需要等待第一次drawRect:
调用只是为了从主线程访问UIGraphicsGetCurrentContext()
和创建所有CGLayers
内容,而浪费了一次绘图运行?
objective-c - CGL vs AGL vs OpenGL vs NSOpenGL vs CoreAnimation(CALayer)
我试图以层的形式了解 Mac 上与 OpenGL 框架集成相关的一些事情。基本上,当我想了解 OS X 中存在的 3D 技术以及哪一层是 OpenGL 的实际实现层时。
通过阅读苹果文档,以下是我迄今为止所理解的:
1.NSOpenGLContext 对象包装了一个低级的、特定于平台的Core OpenGL (CGL) 上下文。
= 这清楚地表明 NSOpenGL 使用了 CGL。
2.AGL(Apple 图形库)API 是 Apple 在 Mac OS X 中实现 OpenGL 的一部分。
= 那么,AGL 和 CGL 有什么关系吗?
3.CGL(Core OpenGL)是Apple实现OpenGL的最低级编程接口。
= 这是否意味着标准 OpenGL API 只是 CGL 的包装?
4.CoreAnimation 似乎是 Core Graphics、Open-GL 和 Quick-time 的组合。但是我不确定它在它下面使用了什么,我的意思是实际的实现层,还是 CGL 吗?
事情对我来说并不完全清楚。我仍在阅读,过去我曾问过一些相关的问题,但知识不完整。
如果有人能分享他对物质的理解,我将不胜感激。
objective-c - 目标 c - 带圆角的 UINavigationBar
我想让我的导航栏有圆角(左上和右上)
我找到了实现它的代码:
但它有一个问题,现在 nab bar 没有角边缘,它在数千个角处都是透明的,我可以看到它后面的视图。
我不希望它是透明的我想在那里放一些黑色。
有人知道该怎么做吗?
objective-c - 为什么 CGLayers 不混合?
为什么 obj2 不与 obj1 混合但不使用 CGLayer 它工作正常,与 CGContextDrawLayerAtPoint 相同的问题,CGLayer 不支持 CGContextSetBlendMode 吗?
cocoa-touch - 为什么在动画块中设置图层锚点时我的视图会跳转?
我有一个 UIPanGestureRecognizer 附加到我的 iOS 应用程序中的视图。我从Touches 示例应用程序中复制了平移处理程序的代码。当手势开始时,我的代码:
- 记录原始锚点和中心。
将锚点和中心更改为用户手指周围,如下所示:
/li>
随着手势的进行,平移处理程序不断更改中心以跟踪手指移动。到现在为止还挺好。
当用户放手时,我希望视图动画回到其原始起点。执行此操作的代码如下所示:
这确实将视图动画化回其原始起点。但是,在动画开始之前,视图会跳转到 UI 中的不同位置。IOW,放手,它跳起来,然后动画回到它所属的地方。
我想也许我需要在动画之外设置锚点和中心,也许将中心设置为超级视图中的位置,就像手势开始时一样,但这似乎没有什么区别。
我在这里想念什么?当用户放手时如何防止跳跃?
iphone - 在 iOS 上,为什么我们必须使用现有的 Graphics Context 创建图层?
在 iOS 上,我们可以CGLayerCreateWithContext
使用现有的 Graphics Context 来做 a ,我们会得到 a CGLayer
,我们也可以使用CGLayerGetContext
.
为什么我们必须CGLayer
使用现有的图形上下文来创建它?我们不能在没有任何图形上下文的情况下创建它吗?而当我们拿到这一层的Graphics Context时,它和原来的Graphics Context有什么关系呢?它们不能只是两个独立的、独立的图形上下文吗?
ios - 在 iOS 上,缓存绘制的屏幕图像并显示它的最快方法是什么?
与其让drawRect
每次重绘数千个点,我认为有几种方法可以“在屏幕上缓存图像”和任何其他绘图,我们将添加到该图像,并在需要时显示该图像drawRect
:
使用 BitmapContext 绘制位图,然后在
drawRect
中绘制此位图。使用
CGLayer
并绘制CGLayer
indrawRect
,这可能比方法 1 更快,因为此图像缓存在显卡中(并且它不会计入 iOS 上“内存警告”的 RAM 使用量?)绘制到 a
CGImage
,并使用视图的图层:view.layer.contents = (id) cgimage;
所以好像有3种方法,我觉得CALayer
方法(3)中只能用aCGImage
来实现。 CALayer
本身不能缓存屏幕图像,不像CGLayer
(2)中那样。
方法(2)是三种方法中最快的吗,还有其他方法可以做到吗?我实际上计划制作一些屏幕图像的动画(循环超过 5 或 6 个),并将尝试使用CADisplayLink
60fps 的最高帧速率。方法(1)、(2)或(3)中的任何一种是否会使用显卡中的内存,因此不使用 RAM,因此也不太可能从 iOS 收到内存警告?