问题标签 [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.
cocoa-touch - containsPoint 不适用于 CAShapeLayer?
我在 UIView 的主层中有两个 CAShapeLayers。CAShapeLayers 具有复杂的形状,我需要知道是否在形状边界内触摸了一个点。另外,我需要知道触摸了哪个形状。
我正在尝试 containsPoint,但没有任何效果。
iphone - 用大 CGPath 绘制 CAShapeLayer
我正在创建一个基于矢量的绘图应用程序,并且真正基于矢量我需要有一个“无限”的画布。所以我创建了以下结构:
用户绘制的每个形状都是一个 CAShapeLayer,并为其分配了 CGPath。当用户缩小容器(比如容器的大小约为 10000x10000 点)并绘制新形状时,我得到比例为 1 的点,然后为新的 CAShapeLayer 分配比例变换(这是我唯一的方法发现有效)。
问题是在我的应用程序中我可以在两个对象之间绘制连接,所以我使用 CAShapeLayer 来绘制连接但是当缩小时(比如两个形状之间的距离约为 5000pts)我用两点画一条线,距离是大约5000pts。这样做我认为跳板重新启动。我读过 CAShapeLayer 只缓存绘制路径的像素,也许这就是我的问题。所以我请求你们的帮助,因为我没有想法。是否有不同的方法来绘制这些巨大的形状并轻松操作它们。
先感谢您。
uikit - CAShapeLayer 缓慢的用户交互
我有一个 CAShapeLayer,它必须完成一个简单的任务,即在用户手指的引导下在屏幕上移动。
问题是移动太慢了。该层确实移动,但有一个滞后,感觉很慢。
我有另一个测试应用程序,其中 UIImage 被移动并且完全没有滞后并且图像立即移动。
我能做些什么来克服这个问题?
谢谢!
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 环境中很容易解决,但是,在这里使用它需要进行大量的重新设计,这根本不值得。)虽然性能问题很小,但我无法摆脱这种感觉我可以做一些简单而明显的事情,这将允许魔杖无限期地动画,而不会暂停在两者之间执行昂贵的旋转计算。
这是一些代码:
ios - 在 iPhone 上使用 CAShapeLayer 和 CoreAnimation 的简单五彩纸屑效果?
我正在我的应用程序上构建一个相当简单的游戏。应用程序用户界面基于很多核心动画,游戏也是如此。我正在尝试使用 CAShapeLayer 和核心动画(以“割绳子”中的五彩纸屑风格)为游戏实现简单的五彩纸屑效果。
任何帮助或方向将不胜感激。
iphone - 如何在 CAShape 层上显示 UIImage?
我在 aUIImage
前面画 a 时遇到问题CAShapeLayer
。我在背景中有一个矢量图像,前面有一个图标。矢量很重要,因为我最终会缩放和动画化它;我在屏幕上有很多这样的东西,所以为了性能,我想在比一堆UIImageView
子视图更低的水平上做这件事。
我试过了:
- 将容器视图的图层类设置为
CAShapeLayer
- 添加一个
CAShapeLayer
作为我的容器视图的子层 - 将容器的图层和/或子图层
content
设置为图像的CGImage
- 在容器视图中手动绘制图像
drawRect
(不过,我的 Quartz-fu 很弱)
在大多数情况下,我会在形状后面绘制图像(我隐约明白这是由于它们本身的CAShapeLayers
合成方式)或根本没有图像。如果不求助于子视图,这肯定是可能的吗?
iphone - 是否可以将背景图像添加到 CAShape?(苹果手机)
我试图以任意方式扭曲图像,例如贝塞尔形状。我使用 CAShapeLayer 创建形状,但似乎将其内容设置为 Image 不起作用。我怎样才能使图像按照该形状变形?甚至可能吗?
谢谢!
iphone - iOS中的自定义图像蒙版
我有屏蔽图像的问题。我做游戏“拼图”并且必须制作自定义图像。我发现并尝试了 2 种自定义裁剪方式:
- 使用
CALayer.mask
属性。 - 使用
UIImage.mask
属性。
在第一个选项中,我创建我的自定义路径,然后将其分配给CAShapeLayer.path
属性,然后分配CAShapeLayer
给CALayer.mask
属性。最后我有自定义裁剪图像。在第二个选项中,我首先使用使用CGImageMaskCreate()
方法(我使用以前创建的拼图黑色蒙版图像),然后CGContextClipToMask()
. 在任一选项中,我都遇到了性能问题(主要是当我将图像裁剪成 16 个拼图并拖入屏幕时)。
是否有任何其他方法可以自定义方式裁剪图像。(我不知道如何解决性能问题)。提前致谢。
ios - 动画绘制 CAShapeLayer 的填充
我一直在尝试使用 CAShapeLayer 绘制路径,如这篇很棒的文章http://oleb.net/blog/2010/12/animating-drawing-of-cgpath-with-cashapelayer中所述,但我是想知道是否有一种方法可以为图层的填充设置动画。
例如,我想在屏幕上绘制一些文本,但我只能绘制文本的笔触而不是填充。另一个例子,我有一个星形,我想用动画填充它。
这可能使用 CAShapeLayer 或其他对象吗?
谢谢!
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,但我还不知道如何使用它。