问题标签 [cashapelayer]

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 回答
1084 浏览

cocoa-touch - containsPoint 不适用于 CAShapeLayer?

我在 UIView 的主层中有两个 CAShapeLayers。CAShapeLayers 具有复杂的形状,我需要知道是否在形状边界内触摸了一个点。另外,我需要知道触摸了哪个形状。

我正在尝试 containsPoint,但没有任何效果。

0 投票
0 回答
1020 浏览

iphone - 用大 CGPath 绘制 CAShapeLayer

我正在创建一个基于矢量的绘图应用程序,并且真正基于矢量我需要有一个“无限”的画布。所以我创建了以下结构:

用户绘制的每个形状都是一个 CAShapeLayer,并为其分配了 CGPath。当用户缩小容器(比如容器的大小约为 10000x10000 点)并绘制新形状时,我得到比例为 1 的点,然后为新的 CAShapeLayer 分配比例变换(这是我唯一的方法发现有效)。 

问题是在我的应用程序中我可以在两个对象之间绘制连接,所以我使用 CAShapeLayer 来绘制连接但是当缩小时(比如两个形状之间的距离约为 5000pts)我用两点画一条线,距离是大约5000pts。这样做我认为跳板重新启动。我读过 CAShapeLayer 只缓存绘制路径的像素,也许这就是我的问题。所以我请求你们的帮助,因为我没有想法。是否有不同的方法来绘制这些巨大的形状并轻松操作它们。

先感谢您。

0 投票
2 回答
2151 浏览

uikit - CAShapeLayer 缓慢的用户交互

我有一个 CAShapeLayer,它必须完成一个简单的任务,即在用户手指的引导下在屏幕上移动。

问题是移动太慢了。该层确实移动,但有一个滞后,感觉很慢。

我有另一个测试应用程序,其中 UIImage 被移动并且完全没有滞后并且图像立即移动。

我能做些什么来克服这个问题?

谢谢!

0 投票
1 回答
1840 浏览

calayer - 替代使用 CABasicAnimation 回调?

除了标准的“animationDidStart:”/“animationDidStop:”方法之外,CAAnimation 不提供分配回调函数的机制。

我有一个自定义 UIControl,它使用了 2 个重叠的 CALayers。这种控制的目的类似于老式的声纳。顶层的内容包含一个不断旋转的图像(将此层称为“魔杖”)。在该层之下是一个“spriteControl”层,当魔杖经过它们时会呈现光点。

blips 表示的对象由 spriteControl 预取并组织成不可见的 CAShapeLayers。我正在使用 CABasicAnimation 一次将魔杖旋转 10 度,然后利用“animationDidStop:”方法调用 spriteControl 上的一个方法,该方法采用魔杖层的当前旋转值(又名标题)并从1.0 到 0.0 用于模拟闪烁和淡出效果。最后,该过程无限期地重新开始。

虽然这种使用 CAAnimation 回调的方法确保了魔杖到达“ping”位置(即 10 度、20 度、270 度等)的时间始终与另一层中光点的照明一致,但存在停止的问题,重新计算,每 10 度启动一次动画。

我可以生成一个 NSTimer 来触发一个方法,该方法查询魔杖表示层的角度以获取航向值。然而,这使得保持魔杖和 blip 突出显示同步变得更加困难,和/或导致一些被完全跳过。这种方法在这里进行了一些讨论:如何在 CABasicAnimation 动画时回调?

所以我的问题是,在不使用 OpenGL ES 重新实现控件的情况下,我是否可以做任何事情来提高魔杖层旋转的性能。(我意识到这在 OpenGL 环境中很容易解决,但是,在这里使用它需要进行大量的重新设计,这根本不值得。)虽然性能问题很小,但我无法摆脱这种感觉我可以做一些简单而明显的事情,这将允许魔杖无限期地动画,而不会暂停在两者之间执行昂贵的旋转计算。

这是一些代码:

0 投票
1 回答
1078 浏览

ios - 在 iPhone 上使用 CAShapeLayer 和 CoreAnimation 的简单五彩纸屑效果?

我正在我的应用程序上构建一个相当简单的游戏。应用程序用户界面基于很多核心动画,游戏也是如此。我正在尝试使用 CAShapeLayer 和核心动画(以“割绳子”中的五彩纸屑风格)为游戏实现简单的五彩纸屑效果。

任何帮助或方向将不胜感激。

0 投票
1 回答
924 浏览

iphone - 如何在 CAShape 层上显示 UIImage?

我在 aUIImage前面画 a 时遇到问题CAShapeLayer。我在背景中有一个矢量图像,前面有一个图标。矢量很重要,因为我最终会缩放和动画化它;我在屏幕上有很多这样的东西,所以为了性能,我想在比一堆UIImageView子视图更低的水平上做这件事。

我试过了:

  • 将容器视图的图层类设置为CAShapeLayer
  • 添加一个CAShapeLayer作为我的容器视图的子层
  • 将容器的图层和/或子图层content设置为图像的CGImage
  • 在容器视图中手动绘制图像drawRect(不过,我的 Quartz-fu 很弱)

在大多数情况下,我会在形状后面绘制图像(我隐约明白这是由于它们本身的CAShapeLayers合成方式)或根本没有图像。如果不求助于子视图,这肯定是可能的吗?

0 投票
2 回答
2457 浏览

iphone - 是否可以将背景图像添加到 CAShape?(苹果手机)

我试图以任意方式扭曲图像,例如贝塞尔形状。我使用 CAShapeLayer 创建形状,但似乎将其内容设置为 Image 不起作用。我怎样才能使图像按照该形状变形?甚至可能吗?

谢谢!

0 投票
3 回答
15563 浏览

iphone - iOS中的自定义图像蒙版

我有屏蔽图像的问题。我做游戏“拼图”并且必须制作自定义图像。我发现并尝试了 2 种自定义裁剪方式:

  1. 使用CALayer.mask属性。
  2. 使用UIImage.mask属性。

在第一个选项中,我创建我的自定义路径,然后将其分配给CAShapeLayer.path属性,然后分配CAShapeLayerCALayer.mask属性。最后我有自定义裁剪图像。在第二个选项中,我首先使用使用CGImageMaskCreate()方法(我使用以前创建的拼图黑色蒙版图像),然后CGContextClipToMask(). 在任一选项中,我都遇到了性能问题(主要是当我将图像裁剪成 16 个拼图并拖入屏幕时)。

是否有任何其他方法可以自定义方式裁剪图像。(我不知道如何解决性能问题)。提前致谢。

0 投票
2 回答
5731 浏览

ios - 动画绘制 CAShapeLayer 的填充

我一直在尝试使用 CAShapeLayer 绘制路径,如这篇很棒的文章http://oleb.net/blog/2010/12/animating-drawing-of-cgpath-with-cashapelayer中所述,但我是想知道是否有一种方法可以为图层的填充设置动画。

例如,我想在屏幕上绘制一些文本,但我只能绘制文本的笔触而不是填充。另一个例子,我有一个星形,我想用动画填充它。

这可能使用 CAShapeLayer 或其他对象吗?

谢谢!

0 投票
1 回答
1370 浏览

path - 帮助 - 在 UIScrollView 中缩放 CAShapeLayer(即路径)

我有一个问题,我希望你能帮助我。顺便说一句,这是针对 iPad 的。

我有一个 UIScrollView、UIImageView、CAShapeLayer 和一个 CGMutablePathRef。

1-所以,我在 UIImageView 中加载了一个图像

2- 然后,我解析了文件中的所有路径,然后将它们添加到 CAShapeLayer(s),即每个 CAShapeLayer 都是一个路径。

3-然后我将所有 CAShapeLayer(s) 添加到 UIImageView.layer

4- 我做了第 3 步,所以我可以使用下面的函数来返回包含图像和路径的视图。这有助于将路径和图像缩放在一起。

5-然后我将 UIImageView 添加到 UIScrollView。

6-然后我将 UIScrollView 子类化,这样我就可以获得 touchesBegan 等。

*注意:当我使用 CGPathContainsPoint(aLayer.path, &transf, touchPoint, NO) 单击它们时,我的所有触摸事件(例如 touchesBegan)都能够检测到所有路径。此外,我也可以在缩放后在视图中滚动,并且效果很好。

*现在的问题是:

  • 每当我放大/缩小时,CAShapeLayer(s) 都会被很好地缩放,但似乎(路径的原始坐标)没有被缩放,或者至少这是我所相信的。我这样说是因为当我单击 CAShapeLayer(s) 时,它们没有响应,但是当我单击它们的原始位置或靠近 CAShapeLayer 显示的位置时,我得到 CAShapeLayer 响应。

  • 我试图将所有 CAShapeLayer(s) 放入一个数组中,从视图中删除它们,然后再次添加它们,但没有改变任何东西。我还尝试了其他东西,例如尝试通过将 CAShapeLayer(s) 添加到 UIScrollView 而不是 UIImageView 来单独缩放 CAShapeLayer(s)。然后我得到当前应用的比例并将其应用到所有 CAShapeLayer(s),但这并没有产生好的结果。

- 检查随附的屏幕截图。我希望他们有所帮助。

我希望你能帮助我,在此先感谢。

*缩放图像之前:http: //imageshack.us/photo/my-images/193/beforescaling.jpg/

*缩放后的图像:http: //imageshack.us/photo/my-images/818/afterscaling.jpg/

**编辑:

- 潜在的解决方案:

1- 可能是我需要更新 CAShapeLayer 的 CATransform3DIdentity。但是,我还不知道该怎么做。

2- 可能是我需要使用 CATransform3DTranslate,但我还不知道如何使用它。