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

iphone - 如何使用 CGLayer 在屏幕外绘制多个图像

最终,我正在研究用于 iPhone 的框模糊功能。

该函数将获取 UIImage 并绘制透明副本,首先到侧面,然后获取该图像并在上方和下方绘制透明副本,返回一个很好的模糊图像。

阅读使用 Quartz 2D Programming Guide 的绘图,建议使用 CGLayers 进行此类操作。

指南中的示例代码对我来说有点难以理解,所以我希望有人向我展示一个非常简单的示例,该示例将UIImage转换为CGLayer,然后我将绘制副本并以UIImage的形式返回。

如果值是硬编码的(为简单起见),那就没问题了。这只是为了我的头脑,而不是为了生产代码。

0 投票
2 回答
1414 浏览

iphone - 计算要保存到相册的 UIImage

我基本上想从一堆源图像中自动创建一个平铺图像,然后将其保存到用户的相册中。我没有成功将一堆小的 UIImage 绘制到一个大的 UIImage 中。实现这一目标的最佳方法是什么?目前我正在使用 UIGraphicsBeginImageContext() 和 [UIImage drawAtPoint] 等。我最终得到的只是一个 512x512 的黑色方块。我应该怎么做?我正在寻找 CGLayer 等。似乎有很多选择,但没有一个特别容易工作。

让我把我的代码放进去:

我应该注意,实际上上面的内容并不是我的代码中发生的事情。真正发生的是,我在 UIGraphicsPushContext 之前调用每一行,包括 UIGraphicsPushContext,然后在动画计时器中,我慢慢地增加绘图并绘制到上下文。然后在这一切完成后,我从 UIGraphicsPopContext 开始调用所有内容。

0 投票
1 回答
1664 浏览

iphone - CGLayer 是一个好的解决方案吗?

我想为我的应用程序添加一些功能,我认为使用 CGLayer 是最好的方法,但之前从未做过任何 Quartz 绘图(除了一些基本教程)。

我的意图是在视图的上半部分显示我的应用程序将绘制的图像的完整视图(基于参数的基本几何形状),并在视图的下四分之一显示该图像的放大部分用户触摸顶部图像的位置。我希望放大的部分以高分辨率显示,所以我想我应该将图像绘制到 640 x 640 CGLayer 上,然后在视图的顶部 320 x 320 一半中绘制整个图层(如此缩放向下以适合),以及用户在左下角 160 x 160 的视图中触摸的相关部分,但未缩放,因此您会看到主图像的四分之一。

当用户在主视图周围移动手指时,左下角的部分视图将从 CGLayer 重新绘制,因此不会发生新的图像渲染,只是 CGLayer 绘制。

任何人都可以看到我缺乏经验的大脑可能错过的这种方法的任何问题吗?

塔,乔尔斯。

0 投票
3 回答
1631 浏览

iphone - 旋转的 CGImage/CGlayer 的抗锯齿似乎是锯齿状的,UIImageView 的不是

我需要用旋转的灰度图像掩盖“纹理”图像。

我发现,我必须用CGImagesCGlayers 来做(如果有更简单的方法只使用UIImageViews,请告诉我)。

我的问题很简单:

任何旋转变换的 CG 东西的抗锯齿都是安静的 锯齿状......

...但是旋转转换的 UIImageView 的抗锯齿有点完美。我怎样才能产生漂亮的抗锯齿旋转?

我已经上传了一个涉及实际 iPhone 模拟器屏幕截图的“证明”,看看我在说什么: http: //gotoandplay.freeblog.hu/files/Proof.png

我尝试使用CGImagesCGLayersUIImageViews “捕获”与renderInContext,我尝试将CGContextSetInterpolationQuality设置为高,并尝试设置CGContextSetAllowsAntialiasing - CGContextSetShouldAntialias,但每种情况都返回相同的锯齿状结果。

我计划明年学习使用 OpenGL,但这个开发应该只使用 CoreGraphics 发布。请让我知道如何获得完美渲染的旋转图像,我不能接受这是不可能的。

0 投票
1 回答
1750 浏览

iphone - 在绘制之前设置 CGLayer 的“不透明度”?

我有 UIView 子类 - 实际上是一个拼图 - 在 initWithFrame 初始化了 2 个不同的 CGLayer。

在 drawRect 我必须混合这两个 layer,并且最上面应该有可变的 alpha取决于游戏逻辑。

执行此操作的最佳(性能优化程度最高)方法是什么?是否有任何 CGLayer 或 CGContext 函数在绘制之前设置一些 alpha?

0 投票
1 回答
1845 浏览

iphone - 在方法drawRect之外绘制CGLayer:更快?

我不确定,我在问什么...

...但是如果在单独的方法中合成图层,并将它们绘制到 drawRect: 方法之外的视图中... ...那么我的应用程序性能会提高吗?

我实际上是一个puzzlePiece:UIView 类的子类,拼图在其中被渲染,但是现在使用setNeedsDisplay 调用重绘,因为绘图实现发生在drawRect: 方法中。应用程序滞后。

如果我摆脱所谓的 drawRect: 方法,我可以提高性能吗?

想要实现的东西:http: //gotoandplay.freeblog.hu/

0 投票
2 回答
1638 浏览

iphone - 使用 CGLayer 缓存 UITableView 中的单元格

我正在尝试提高我们应用程序中滚动的性能。我遵循了所有普遍接受的建议(用 CG 自己绘制,单元格不透明,没有子视图等),但是当我们有后台 CPU 和网络活动时,它有时仍然卡顿。

此处说明了一种解决方案:

http://www.fieryrobot.com/blog/2008/10/08/more-glassy-scrolling-with-uitableview/

是缓存单元格的位图快照,我们尝试过。但是位图很模糊,占用了大量内存(每个大约几百 kb)。

该链接评论中的一个建议是使用 CGLayer 或 CALayer(?) 缓存单元,因为它们会进入显卡的内存。那么几个问题,

1)有人试过吗?示例代码?

2)iphone/ipod touch显卡有多少内存?这有道理吗?

3) 任何其他加快速度的建议?


更多信息

我使用 CPU 采样器(在电话上)并系统地从电池中消除了一些东西以找出问题所在。一些东西:

1)这不是细胞的设置。如果我只删除绘图调用(drawinrect 等),但离开设置,它是玻璃状的。

2)它不是最小图像(25x25 png)的绘图,如果我把它放进去就可以了。

3)如果我添加第二个或第三个图像(第一个是 320x1004kB 的大背景,另一个是 61x35 4kB 的按钮图像)它会结结巴巴。我在一个类方法中同时获取 UIImages,所以它被缓存了。

4)文字也是一个问题。看起来 drawRect 将 75% 的时间花在了我正在使用的三个 NSString drawInRect 方法上。喜欢:

[mytext drawInRect:drawrect withFont:myFont lineBreakMode:UILineBreakModeTailTruncation];

这些电话似乎通过 webcore,也许这会导致一些口吃?我需要能够格式化两行文本和一小段文本。我需要能够用省略号截断文本。我可以在关键路径之外执行这些并缓存它们吗?我可以用层做那部分吗?

0 投票
3 回答
1334 浏览

iphone - iPhone:绘制存储在数组中的 CGLayers 时崩溃

我正在尝试构建一个具有重做和撤消功能的绘图应用程序。我的想法是在“touchMoved”中的图层中绘制线条,然后将图层保存在“touchEnded”中。

我不确定我是否正确地绘制到图层,但一切正常,直到我清除我正在绘制的图像并尝试重绘数组中的图层。

这是我尝试重绘图层的方法。应用程序在到达CGContextDrawLayerAtPoint()

0 投票
1 回答
1276 浏览

iphone - 如何创建一个绘制图像的 CGlayer?

我只需要知道热就可以创建一个CGLayer绘制有图像的图像。我没有完全理解文档。谢谢

0 投票
0 回答
681 浏览

iphone - 使用 CGLayers 创建自定义动画?

基本上,我想制作一个缩小的圆圈。我已经通过在 CGLayer 上绘制越来越小的圆圈来完成此操作,然后使用

if(index < 30){
[self performSelector:@selector(showNextLayer) withObject:nil afterDelay:(NSTimeInterval)0.02]; 索引++;
}

在我的 showNextLayer 方法中。这适用于我的简单目标,但总的来说,这是绘制自定义动画的一种或多或少明智的方式吗?

Apple 有很多关于动画的文档 - 足以让我感到困惑 - 但据我 - 最终 - 了解:

  1. UIView 提供的动画服务非常适合动画一些基本的视图属性,视图转换等,
  2. 那些由继承自 CAAnimation 的类提供的那些,适用于动画属性,如颜色变化、3d 转换等。
  3. UIViewImage 非常适合动画自定义位图图像(当您可以在 CGLayer 中绘制圆圈时,创建位图图像不是一个好主意)。

在我看来,显示一系列 CGLayer 的内容也将得到支持,我错过了什么吗?

提前感谢您的任何澄清..