问题标签 [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 投票
4 回答
2149 浏览

macos - CATextLayer 过早栅格化并且模糊

我在使用 CATextLayer 时遇到了一些问题,这可能是我自己造成的,但我没有找到关于这个主题的任何帮助。我在 OS X 上(在 iOS 上应该是一样的)。

我创建了一个比例因子 > 1 的 CATextLayer 图层,我得到的是一个模糊的文本。我认为,在应用比例之前,图层会被栅格化。这是预期的行为吗?我希望不是,因为它没有任何意义...... CAShapeLayer 在应用它的变换矩阵之后被光栅化,为什么 CATextLayer 应该不同?

万一我做错了什么……那是什么?

我目前使用的解决方案是将图层的 contentsScale 属性设置为比例因子。问题是这个解决方案不能缩放:如果任何父层的缩放因子发生变化,那么 contentsScale 也应该更新。我应该编写代码来遍历图层树以更新所有 CATextLayers 的 contentsScale 属性......这不完全是我想做的。

另一种解决方案(不是真正的解决方案)是将文本转换为形状并使用 CAShapeLayer。但后来我看不出拥有 CATextLayers 的意义。

CALayer 的自定义子类可以帮助解决这个问题吗?

编辑:甚至 CAGradientLayer 也能够渲染其内容,如 CAShapeLayer,之后应用其变换矩阵。有人可以解释这是怎么可能的吗?

编辑 2:我的猜测是路径和渐变被渲染为 OpenGL 显示列表,因此它们由 OpenGL 本身以屏幕上的实际大小进行光栅化。文本由 Core Animation 光栅化,因此它们是 OpenGL 的位图。

我想我现在会使用 contentsScale 解决方案。也许,在未来,我会将文本转换为形状。为了通过少量工作获得最佳结果,这是我现在使用的代码:

0 投票
1 回答
1169 浏览

ios - 如何通过自定义渐变更改strokeColor

我想为 CAShapeLayer 的 strokeColor 设置动画,但在 CABasicAnimation 中我有两个值(从和到)。动画火了是不是只有两种颜色支持?例如,在开始时我strokeColor = [UIColor blueColor].CGColor;

在中途我有一个深紫色,但我需要,例如,黄色。

是否可以向 CABasicAnimation 添加自定义渐变?

0 投票
0 回答
361 浏览

ios - CABasicAnimation:如果 CAShapeLayer 的位置没有改变怎么办?

我对CABasicAnimation主题真的很陌生。如果要将CAShapeLayerx 位置从当前 x 位置动画到特定 x 位置,则应使用以下命令:

在我的例子中,self.shapeLayer 是一个 CAShapeLayer,用作一个简单的蒙版:

但是如果动画永远不会发生(x 位置没有改变)怎么办?我在我的代码中做错了什么?有什么建议、想法、例子吗?

非常感谢

0 投票
5 回答
2919 浏览

iphone - iOS中的外部填充颜色

我有两个矩形(两个封闭的 sub cgpaths)。矩形 B 很小,并且存在于矩形 A 内。其中的所有边。是否有直接的方法来填充矩形 B 外部的颜色区域。

CAShapeLayer fillExternalColor类似的东西?如果不是直接方式,如何以编程方式执行此操作?

A - 紫色 B ​​- 黄色

先画A再画B 先画B,再画A

所以我试着画A,然后画B。我希望B是清晰的颜色(现在我放黄色)但后来我看到A的紫色......

我找到了给出 AnB 的 CGRectIntersection 方法和给出 AuB 的 CGRectUnion 方法。有没有一种方法可以给出 AuB - AnB 的其余区域?

0 投票
1 回答
1758 浏览

objective-c - 根据内容大小设置 UIView 的大小

是否可以在 a 上绘制一些东西UIView,然后在绘制完成后,将视图调整为与之前绘制的东西相同的大小?

例如,如果我在 a 上画一个圆UIView,我想将 裁剪UIView成我刚刚在视图上画的圆的尺寸。

更新

我正在研究使用 CAShapeLayer 作为可能的解决方案。有谁知道如何将 UIBezierPath 转换为 CAShapeLayer 然后设置 CAShapeLayer 的位置?

我努力了:

但这不起作用。

0 投票
1 回答
423 浏览

iphone - CAShapeLayer 画线

我正在(X,Y axis)使用CAShapeLayer.

我的问题是我想知道CAShapeLayer(在我的情况下是行)当前处于什么视图。是否有任何CGIntersectforCALayerCGRect?我正在尝试使用核心动画而不是任何图表 API 创建图形。

0 投票
1 回答
879 浏览

ios - UIImageView 移动时 CAShapeLayer 路径动画卡顿

我一直有一个我似乎无法弄清楚的问题。在我的应用程序中,我使用自定义 UIImageView 类来表示可移动对象。有些加载了静态 .png 图像并使用帧动画,而其他加载了来自 .svg 文件的 CAShapeLayer 路径。对于其中一些,当图层从一条路径动画到另一条路径时,我会变得口吃,而 UIImageView 正在移动。

您可以在链接的视频中看到它。当我触摸美人鱼角时,会产生一个音符(svg 路径)并动画成一条鱼(另一个 svg 路径),同时向上漂移。口吃发生在动画/漂移期间。最明显的是我第三次生成鱼,大约在视频 19 秒后。(每个动画结尾的跳跃我需要单独修复,所以不用担心)

http://www.youtube.com/watch?v=lnrNWuvqQ4w

当我在 iOS 模拟器中测试应用程序时,这不会发生 - 一切都很顺利。在我的 iPad 2 上,它结结巴巴。当我关闭音符/鱼的运动(向上漂移)时,它在 iPad 上的动画很流畅,所以显然它与同时移动视图有关。我缺少一些东西,但我无法弄清楚。

这是我设置动画的方法。PocketSVG 是我在 Github 上找到的一个类,它可以将 .svg 转换为 Bezier 路径。

这基本上就是我移动 UIImageView 的方式。我在 60 帧时使用 CADisplayLink,根据 的现有位置找出新点animShape.position,然后像这样更新,selfUIImageView 在哪里:

其他一切都运行顺利,只是这一组对象在 iPad 本身上运行时结结巴巴地跳来跳去。关于我做错了什么的任何想法?也许是用错误的方式移动它?我仍然对图层、框架和边界感到困惑。

0 投票
1 回答
230 浏览

ios - How to get the portion of image that is masked in iPhone

I have used CAShapeLayer for masking my image and i want to retrieve only the portion that i have masked. When i retrieve, i am getting only the full image.

Can anyone please provide me some code/information regarding this ?

CAShapeLayer *maskLayer = [CAShapeLayer layer];

Thanks in advance :)

0 投票
1 回答
221 浏览

ios - 设置位置后接触 CAShapeLayer

我有一系列 UIBezierPaths,我将它们组合并添加到 CAShapeLayer。我需要检测用户在形状层上触摸的位置。但是,因为我更改了形状图层的位置,所以当我点击形状图层时,它不会检测到点击,因为它正在将点击坐标与贝塞尔路径原始位置的坐标进行比较。有谁知道我是否可以简单地点击 CAShapeLayer 的当前位置?而不是依赖其底层贝塞尔路径作为点击原点。

0 投票
1 回答
4329 浏览

ios - iOS:CAShapeLayer 绘制非矩形图像并为其形状设置动画

我一直在阅读文档,CAShapeLayer但我仍然不太明白。据我了解,Layer它总是平坦的,它的大小总是一个矩形。

CAShapeLayer另一方面,允许您定义一个不仅仅是矩形的层。它可以是圆形、三角形等,只要你使用它UIBezierPaths

我的理解到这里了吗?

我想到的是,例如,一个网球从屏幕边缘反弹(很容易),但我想显示一个不使用图像动画的小动画 - 我希望它显示一点“挤压“就像动画一样,因为它撞击屏幕边缘然后反弹。我没有使用网球图像。只是一个黄色填充的圆圈。

我在这里是正确的CAShapeLayer吗?如果是这样,你能提供一个小例子吗?谢谢。