问题标签 [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.

0 投票
1 回答
749 浏览

macos - 在 CGL 上下文上绘制 CGImageRef 和 CGBitmapContextRef?

我正在寻找一种在 CGL 上下文上绘制 CGImageref 和 CGBitmapContextRef 的方法?

0 投票
2 回答
270 浏览

iphone - 如何在不强制重绘的情况下删除 UIView 子视图?

这在某种程度上是一个假设性的问题,但我可以想象这种情况在未来的某个时候会出现:让我们暂时假设我有一个非常复杂的 UIView 层次结构,我只需要渲染一次。我们还假设,一旦绘制,我就不再使用父视图下的信息(UIImages、标签、自定义视图、坐标等)。这个想法不是保留它们,而是释放它们使用的所有额外内存,同时避免重绘。结果与绘制到屏幕外缓冲区然后将其推送到屏幕上相同。是否可以直接使用 UIView/CGLayer 来实现这一点,或者是将父 CGLayer 的内容转换为 UIImage 的唯一选择?

只是好奇。我想在大多数情况下,保留一些额外视图的开销可以忽略不计,但内存就是内存,除了分配位图之外,我无法在官方文档中找到任何内容。

谢谢!

0 投票
2 回答
550 浏览

performance - 将屏幕外 CGLayer 传送到当前上下文时出现锯齿状路径

在我当前的项目中,我需要绘制一个复杂的背景作为一些 UITableView 单元格的背景。由于在单元格的 drawRect: 方法中执行时用于绘制此背景的代码很长且占用大量 CPU 资源,因此我决定仅将其渲染到 CGLayer 一次,然后将其传送到单元格以增强整体性能。

我用来将背景绘制到 CGLayer 的代码:

将图层blit到当前上下文的代码:

这实际上做得很好,但我遇到的唯一问题是圆角(检查静态方法)。闪到屏幕上时非常锯齿。当绘图代码位于其原始位置时,情况并非如此:在 drawRect 方法中。

如何恢复这种抗锯齿功能?

由于某种原因,以下方法对抗锯齿没有任何影响:

提前致谢!

0 投票
1 回答
493 浏览

iphone - 如何访问 CGContext 以在屏幕外创建 CGLayer

意图:创建CGLayer屏幕外,从第二个线程在其上绘制一些复杂的东西,然后在主线程上使用它来快速绘制

问题: CGLayerCreateWithContext(context, size, info)期望一个已经存在的CGContext,以便它知道需要优化什么样的上下文。

到目前为止我找到的解决方案: CGContextRef ctx = UIGraphicSetCurrentContext() 但是这个功能似乎不再存在了。

问题:没有其他方法可以访问默认上下文之类的内容吗?还是我真的需要等待第一次drawRect:调用只是为了从主线程访问UIGraphicsGetCurrentContext()和创建所有CGLayers内容,而浪费了一次绘图运行?

0 投票
1 回答
2956 浏览

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 吗?

事情对我来说并不完全清楚。我仍在阅读,过去我曾问过一些相关的问题,但知识不完整。

如果有人能分享他对物质的理解,我将不胜感激。

0 投票
1 回答
2850 浏览

objective-c - 目标 c - 带圆角的 UINavigationBar

我想让我的导航栏有圆角(左上和右上)

我找到了实现它的代码:

但它有一个问题,现在 nab bar 没有角边缘,它在数千个角处都是透明的,我可以看到它后面的视图。
我不希望它是透明的我想在那里放一些黑色。
有人知道该怎么做吗?

0 投票
1 回答
591 浏览

objective-c - 为什么 CGLayers 不混合?

为什么 obj2 不与 obj1 混合但不使用 CGLayer 它工作正常,与 CGContextDrawLayerAtPoint 相同的问题,CGLayer 不支持 CGContextSetBlendMode 吗?

0 投票
1 回答
2464 浏览

cocoa-touch - 为什么在动画块中设置图层锚点时我的视图会跳转?

我有一个 UIPanGestureRecognizer 附加到我的 iOS 应用程序中的视图。我从Touches 示例应用程序中复制了平移处理程序的代码。当手势开始时,我的代码:

  • 记录原始锚点和中心。
  • 将锚点和中心更改为用户手指周围,如下所示:

    /li>

随着手势的进行,平移处理程序不断更改中心以跟踪手指移动。到现在为止还挺好。

当用户放手时,我希望视图动画回到其原始起点。执行此操作的代码如下所示:

这确实将视图动画化回其原始起点。但是,在动画开始之前,视图会跳转到 UI 中的不同位置。IOW,放手,它跳起来,然后动画回到它所属的地方。

我想也许我需要在动画之外设置锚点和中心,也许将中心设置为超级视图中的位置,就像手势开始时一样,但这似乎没有什么区别。

我在这里想念什么?当用户放手时如何防止跳跃?

0 投票
0 回答
53 浏览

iphone - 在 iOS 上,为什么我们必须使用现有的 Graphics Context 创建图层?

可能重复:
在 iOS 上,在我们从上下文创建层并获取层的上下文之后,这些上下文如何相互关联?

在 iOS 上,我们可以CGLayerCreateWithContext使用现有的 Graphics Context 来做 a ,我们会得到 a CGLayer,我们也可以使用CGLayerGetContext.

为什么我们必须CGLayer使用现有的图形上下文来创建它?我们不能在没有任何图形上下文的情况下创建它吗?而当我们拿到这一层的Graphics Context时,它和原来的Graphics Context有什么关系呢?它们不能只是两个独立的、独立的图形上下文吗?

0 投票
2 回答
4846 浏览

ios - 在 iOS 上,缓存绘制的屏幕图像并显示它的最快方法是什么?

与其让drawRect每次重绘数千个点,我认为有几种方法可以“在屏幕上缓存图像”和任何其他绘图,我们将添加到该图像,并在需要时显示该图像drawRect

  1. 使用 BitmapContext 绘制位图,然后在drawRect中绘制此位图。

  2. 使用CGLayer并绘制CGLayerin drawRect,这可能比方法 1 更快,因为此图像缓存在显卡中(并且它不会计入 iOS 上“内存警告”的 RAM 使用量?)

  3. 绘制到 a CGImage,并使用视图的图层:view.layer.contents = (id) cgimage;

所以好像有3种方法,我觉得CALayer方法(3)中只能用aCGImage来实现。 CALayer本身不能缓存屏幕图像,不像CGLayer(2)中那样。

方法(2)是三种方法中最快的吗,还有其他方法可以做到吗?我实际上计划制作一些屏幕图像的动画(循环超过 5 或 6 个),并将尝试使用CADisplayLink60fps 的最高帧速率。方法(1)、(2)或(3)中的任何一种是否会使用显卡中的内存,因此不使用 RAM,因此也不太可能从 iOS 收到内存警告?