问题标签 [calayer]

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 投票
5 回答
21856 浏览

ios - 如何立即移动 CALayer(无动画)

我正在尝试CALayer在 iOS 应用程序中拖动 a 。

一旦我改变它的位置属性,它就会尝试动画到新的位置并在整个地方闪烁:

我怎样才能CALayers立即移动?我似乎无法理解 Core Animation API。

0 投票
4 回答
109225 浏览

ios - 如何将透视变换应用于 UIView?

我正在寻找对 UIView 执行透视变换(例如在coverflow中看到的)

有谁知道这是否可能?

我已经使用CALayer并浏览了所有实用程序员 Core Animation 播客,但我仍然不清楚如何在 iPhone 上创建这种转换。

任何帮助、指针或示例代码片段将不胜感激!

0 投票
4 回答
2713 浏览

iphone - 如何在 iPhone 上手动制作动画?

我在 iPhone 上设置了一个非常简单的“游戏”。物体四处移动,旋转,您可以与它们进行交互等。在模拟器中,它运行良好,但在设备上它达到 0.25 FPS 左右,而且速度非常慢,显然没有时间识别触摸。

这最初只是使用带有Items 数组的 UIView,每个数组都有一个 Tick 和一个 Draw 函数。在应用程序开始时,我启动了一个以 60 FPS 拍摄的 Timer,它调用 Tick,在 Tick 结束时,它调用[self setNeedsDisplay];

它工作得非常慢,所以我把这个Item类变成了这个类的一个子CALayer类,移动图层而不是重绘项目。但是,我是CALayer逐帧手动移动的,这显然不好。还是太慢了。所以我告诉它移动到它的最终目的地,并给它一个与到达那里所需的滴答数相等的长度。

这没问题,但是在某些情况下,如果您与某物交互,它应该停止以这种方式移动并转而做其他事情。所以我回到移动每个刻度,而不是仅仅设置新位置,我还将它包装在一个 CATransaction 中,并赋予交易与刻度相同的长度。

工作正常,但出现了新问题:如果我想为某些东西制作动画,我仍然必须在每个滴答声中使用 [self setNeedsDisplay] ,它调用drawInContext:,这似乎是一个主要的减速问题。

难道没有一种方法可以像我以前那样手动绘制所有内容吗?我只是在进行 CGContext* 调用,它在模拟器中运行良好!如果我在 J2ME 或嵌入式 C++ 中实现类似的东西,它会工作得很好。我错过了什么?我真的需要学习 OpenGL 来制作任何有趣的手动动画吗?

0 投票
3 回答
1748 浏览

cocoa-touch - 绘制路径时CALayer闪烁

我正在使用 aCALayer通过drawLayer:inContext委托方法显示路径,该方法位于图层所属视图的视图控制器中。每次用户在屏幕上移动手指时,路径都会更新并重新绘制图层。但是,绘图跟不上触摸:在显示路径的最后两个点时总是有轻微的延迟。它也会闪烁,但只是在再次显示最后两三个点时。如果我只是在视图中进行绘图drawRect,它可以正常工作并且绘图绝对足够快。

有谁知道它为什么会这样?我怀疑这与图层缓冲有关,但我找不到任何有关它的文档。

0 投票
1 回答
2475 浏览

cocoa - 减少 Core Animation 内存使用的技巧

所以情况如下:

我有一个屏幕大小的 CALayer,我将内容属性设置为 2 Mb JPEG,大小约为 3500 x 2000 像素,分辨率为 240ppi。

我预计使用 CALayer 会产生轻微的开销,但我的示例应用程序(仅执行上述操作)显示使用了大约 33Mb RSIZE、22Mb RPVT 和 30Mb RSHRD。我注意到当以 64 位运行应用程序时,这些数字比以 32 位进程运行时要好得多。

我正在做我在这个示例来自的实际应用程序中能想到的所有事情,包括将我的 CGImageRefs 重新采样为仅是图层的大小,但这对我来说似乎无关紧要 - 它不应该更简单吗?

有没有人遇到过减少 CALayers 和 CGI​​mageRefs 使用的内存量的好方法?

0 投票
4 回答
17072 浏览

iphone - 如何在 CALayer 上获取触摸事件?

我是 iPhone SDK 的新手。现在我正在使用我非常喜欢的 CALayers 进行编程——它不像 UIViews 那样昂贵,而且比 OpenGL ES sprites 的代码少得多。

我有一个问题:是否可以在 CALayer 上获得触摸事件?我了解如何在 UIView 上获得触摸事件

但我找不到任何关于如何在 CALayer 对象上获得触摸事件的信息,例如,漂浮在 3D 空间中的橙色正方形。我拒绝相信我是唯一对此感到好奇的人。

我很感激任何帮助!

0 投票
6 回答
13266 浏览

iphone - 你如何复制一个CALayer?

如何使 NSArray 充满 CALayer 的多个实例(都具有相同的框架、内容等)?

背景:创建 CALayer 需要一些开销,所以我想在一个类的 init 方法中创建一些 CALayer(都共享相同的属性)(稍后在该类中使用。)

0 投票
2 回答
4473 浏览

iphone - 我应该如何在 iPhone 上做多个动画?

我想为一个游戏制作多个部分的动画,并且我想让这些部分朝不同的方向移动,这样我当前为整个视图制作动画的方法将不再有效。

我想知道一次为多个项目设置动画的最佳做法是什么。(注意我在 2d 中渲染,所以我目前对 3d 解决方案不感兴趣。)

谢谢!

0 投票
2 回答
2557 浏览

iphone - 如何在 iPhone 上优化 UIColor?

我正在创建一个由自定义滑块类型控件控制的简单颜色选择器。

我将一个浮点值从我的滑块传递到 UIColor 构造函数方法,并随着值的变化更新 CALayer 的背景颜色。

它在模拟器中运行非常流畅,但在设备上运行时会出现很多闪烁。

这仅仅是因为它对 GPU 过度征税吗?奇怪的是,当穿过蓝色时,这是最糟糕的。并且改变 alpha 值和亮度比改变饱和度和色调更容易闪烁。

我不应该在滑块值更改时传递任意浮点值吗?如果没有,我如何将其限制为更少的颜色以进行优化?

我想过禁用 CALayer 的 backgroundColor 属性的隐式动画,但我不知道该怎么做。

是否有任何优化 UIColor 更改的技巧。

更新

我没有使用 drawRect: 或 drawInRect:

我只是在更改 CALayer 的 backgroundColor 属性。每次调用 touchesMoved: 时,我都会抓取位置,创建一个 0.0 到 1.0 的浮点值,并向我的委托传递一条消息,告知该值已更改,然后调用 -(void)updateCurrentColor 方法。

这是我的实现示例:

起初我认为这是由于触摸界面的不精确造成的跳跃值。平滑功能有所帮助,但它仍然会闪烁一些,尤其是在使用 alpha 值时,即使我的位置仅改变 1 个像素。我应该将其限制为有限数量的颜色/值,而不是仅仅传入任意浮点数吗?同样,在模拟器中运行良好,似乎只是一个性能问题。

0 投票
2 回答
1820 浏览

iphone - 为什么我无法在 iPhone SDK 中访问 CALayer 的 visibleRect 属性?

我在这样做时遇到了麻烦:

我得到的错误是:

错误:在不是结构或联合的东西中请求成员“visibleRect”

但文件说:

visibleRect 返回接收器在其自己的坐标空间中的可见区域。(只读)@property(只读)CGRect visibleRect

我已经包含了 QuartzCore.framework、CoreGraphics.framework、UIKit.framework、Foundation.framework。

那么如果返回一个 CGRect,为什么它不起作用呢?任何的想法?