问题标签 [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 回答
597 浏览

ios - 在 Cglayer 中绘图时变得模糊

我正在使用一个绘图应用程序,我在 CGlayers 中绘图,然后在图形上下文上绘图,但我的绘图变得模糊。

这是我的代码

根据文档,我用这段代码得到了模糊的笔触,每当我们使用 graphicsContext 创建 CGlayer 时,他们说它将提供设备的分辨率,但是为什么我会得到模糊的线条。

这是模糊线的图像 在此处输入图像描述

问候兰吉特

0 投票
4 回答
3135 浏览

ios - 在 iOS 中撤消/重做绘图

我正在开发一个绘图应用程序,我想做撤消/重做,为此我将 CGPath 保存到 NSMutableArray,但我不明白如何在单击撤消按钮时渲染 CGPath

编辑1:

由于我使用的是 BezierPaths,所以,我首先决定采用一种简单的方法,即在没有 CGPath 的情况下抚摸这条路径,

EDIT2:由于我的撤消是在分段中发生的(即部分而不是整个路径被删除),我决定创建一个数组数组,所以我做了相应的更改,现在我将在 CGlayer 中绘制,并采用 CGPath

所以这里的“parentUndoArray”是数组数组。

所以我这样做了

我有一个名为 DrawingPath 的类,它将进行绘图

所以现在在我的 DrawingView 中,我这样做

我的drawRect方法如下

编辑:现在我的 DrawRect 有两种情况

EDIT2:现在我现在面临的问题是,即使我绘制小路径或大路径,数组数组中的数据都是相同的。但实际上,小路径应该包含较少的drawingPath对象,大路径应该包含更多的undoArray中的drawingPath对象,最后添加到名为“ParentUndoArray”的数组数组中

这是屏幕截图,

1.第一屏 不抬手指一气呵成的画线截图

在此处输入图像描述

2、undo操作一次后,只删除该行的一部分

在此处输入图像描述

0 投票
3 回答
1989 浏览

ios - “不再推荐 CGLayer”;这是普遍共识吗?

我编写了一个 iOS 应用程序,我在其中使用CGLayer得非常成功。在研究从这个应用程序中挤出更多性能的方法时,我看到了这篇博文:http: //iosptl.com/posts/cglayer-no-longer-recommended/,其中作者非常广泛地指出CGLayer永远不会使用。单独的帖子无需担心,但我也发现人们将这篇帖子称为要遵守的内容。

没有提供真正的细节。例如,作者说“有时更快,有时更慢”。这让我想知道是否担心程序员一般不会正确使用这个对象。

我想这个问题是针对经验丰富的 Cocoa/Cocoa Touch 开发人员的。这有什么优点吗?CGLayer确实是要避免的事情,如果是的话,是否有具体的、可衡量的理由来解释为什么?

0 投票
0 回答
230 浏览

ios - 绘图在 iOS 中变得像素化

我正在开发一个绘图应用程序,我正在绘制CGlayers,我正在以这种方式创建一个 CGlayer

现在,由于我的绘图 Canvas 可以动态增加/减少,每当用户执行任何操作时,我都会再创建一个图层并将以前的绘图存储到新的 CGlayer 上

一切正常,但发生的情况是,每当我画一些东西然后增加画布大小,再次绘制,然后增加画布大小,然后再次绘制等等,

然后,我之前的绘图变得像素化,这是图像

在此处输入图像描述

0 投票
1 回答
771 浏览

ios - CGlayer 绘图性能缓慢

正如文档所说,我正在使用CGlayers进行绘图,这是在画布上渲染绘图的更有效方式。

我基本上绘制到 CGlayers 并使用CGContextDrawLayerInRect将图层绘制到图形上下文中

这是我的 drawRect 方法

在我的 Touched 函数函数中,我创建了 UIBezeirPath 并将其转换为 CGPath。

在接触结束

我面临的问题如下

1)我用时间分析器CGContextDrawLayerInRect测试,在绘制时需要 90% 的时间,所以我想知道我们如何减少这种方法所花费的时间并优化 drawRect 方法。

2)如果我画了几条长线并开始不断地撤消/重做,那么你也可以看到 CGContextDrawLayerInRect这需要很多时间。

3)如果我擦除一些画线并开始重复撤消/重做,更糟糕的是,我的应用程序崩溃并出现内存警告,我不知道擦除出了什么问题,它占用了这么多内存。

编辑:代码,更新以显示静态分析器说它们是内存问题的位置

0 投票
0 回答
187 浏览

ios - 将一个 CGlayer 绘制到另一个 CGlayer

我使用两个 CGlayer 进行绘图,Layer1 和 Layer2,我绘制到 Layer1 并在触摸结束时,我将数据传输到 Layer2 并清除 Layer1,在我的 drawRect 方法中,我将两个层都绘制到上下文中。

单击擦除按钮时,我将绘图从 Layer2 传输到 Layer1,然后我擦除 layer1,但在触摸结束时,我不将其传输到 Layer2,因为我只擦除 Layer1

点击笔如果发生擦除,我将绘图从 Layer1 转移到 Layer2,否则之前的绘图会消失。

在代码中,它就像

所以我以这种方式将绘图从一个图层转移到另一个图层,但是会发生什么

1)如果我画一条线,然后我点击擦除按钮,然后不擦除,如果我再次点击笔按钮并且没有绘制任何东西,如果我再次点击擦除按钮,现在当我尝试擦除整个绘图时消失

2)但是如果我画线,然后单击擦除按钮并擦除一条线,然后再次切换到笔按钮并绘制一条线,然后再次切换到擦除按钮并尝试擦除,它完美地工作。

0 投票
1 回答
1999 浏览

ios - CGContext 无效上下文 0x0

我正在绘制 CGlayers,所以我正在创建图层并将图层绘制到 drawRect 方法中的图形上下文中,这种方式

我在 touchesMoved 函数中完成所有绘图操作

但是当我开始绘图时,我收到了所有用于触摸移动的 CGContext 函数的错误消息,我在下面列出了其中的一些。

  1. 我知道错误是因为尚未创建图层,因此,我收到此错误,但是应该在 drawRect 方法中创建图层,只是因为它的图形上下文是活动的。
  2. 如果我[self setNeedsDisplay]先调用我的绘图函数,最后再调用[self setNeedsDisplay],那么一切正常,没有错误,但我不认为,或者不知道这是否是正确的做法。
0 投票
1 回答
350 浏览

ios - CGlayer drawing getting slow

I am working with CGlayer drawing, I am using 3 CGlayers for drawing, named as temporary, permanent and newLayer.

1) While drawing, I draw first into temporary Layer and on touchesEnded, I transfer data from temporary to permanent Layer and clear out temporay Layer

Here is the code

Now my canvas size is dynamic, user can increase/decrease it, so whenever, user increases the canvas size, I first create a new Layer called newDrawingLayer draw the drawing from pemanentLayer into this NewDrawingLayer and destroy permanent Layer

Now when user tries to erase, when he clicks on erase button, I transfer data from permanentLayer to CurrentLayer and then do erase

Here is my drawRect method

The problems I am facing are

1) Whenever I erase the drawing by increasing the canvas size and then try to draw again, my drawing is extremely slow, which is not at all acceptable.

2) If I dont increase the canvas size and then perform drawing and erasing continously, I dont have any issues.

What can be the reason that the drawing gets so slow, I think, because, system is trying to draw three Layers, or is it something else, that I am not aware of, please help me out friends. If any doubts, please ask, I will try to explain it better.

0 投票
1 回答
1159 浏览

ios - Coregraphics (iOS) 中的内存管理

我正在开发一个绘图应用程序,我正在使用 CGlayers 进行绘图,所以我打开我的画布以单击按钮进行绘图,

我正在使用 UIBezierPath,然后在下面的 touchesMoved 中将其转换为 CGPath,然后使用它来绘制

这是我的 drawRect 方法

我手动创建了setter方法

现在,当用户单击保存按钮时,我以这种方式从画布中获取图像

我得到图像并将其显示在屏幕上调整大小图像的网格上,但是当我执行这些操作时,我的内存使用量总是激增,并且没有减少,这是创建三幅图后的屏幕截图

要调整图像大小,我使用它,我在单独的线程中运行它

在此处输入图像描述

内存不断增加,最后在创建了大约 30 张图纸后,我的应用程序崩溃了,因为内存飙升至 550MB

所以,我不明白我哪里出错了,我如何在绘图时管理内存问题。

0 投票
1 回答
304 浏览

ios - CGlayer 的内存问题

我正在使用 CGlayers 进行绘图。我已经实现了绘图部分,用户将绘制的drawingView(canvas)是动态的,我的意思是,用户可以增加/减少drawingView(Canvas)的高度

例如默认大小 - 500*200

当用户点击展开按钮时 - 500*300

所以这是我在用户展开画布时的功能,

所以让我解释一下我在上面的代码中做了什么,我正在创建一个 newLayer,它的大小在增加之前,然后将 previousDrawing 从“* PermanentDrawingLayer ”转移到这个“ newDrawingLayer ”并使“permanentDrawing”为零*

所以每当我画画时,我都会画到permanentDrawingLayer,这是我的drawRect方法

在这里你可以看到,我用 rectSize 绘制 newDrawingLayer,用 newSize 绘制 permanetDrawingLayer,所以每当我在画布上绘制时,如果用户增加了尺寸,newDrawingLayer 就会绘制它,而无论用户做什么,新的绘制都将在 PermanentDrawingLayer 中完成。希望很清楚。

现在这是我的问题

1)当我drawSomething并增加canvasSize时,内存峰值达到10MB,所以如果我总是这样做,你可以想象,我的应用程序由于内存压力而终止的速度有多快。

2)我看到的是,如果我在函数-“ IncreaseCanavasSize ”中评论“ PermanentDrawingLayer = nil ”行,那么内存不会飙升,但如果我不这样做,那么当我下次绘制时,带有 newSize 的图层将不会创建,我会得到重复的图纸。

所以我需要你的帮助