问题标签 [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.
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 解决方案。也许,在未来,我会将文本转换为形状。为了通过少量工作获得最佳结果,这是我现在使用的代码:
ios - 如何通过自定义渐变更改strokeColor
我想为 CAShapeLayer 的 strokeColor 设置动画,但在 CABasicAnimation 中我有两个值(从和到)。动画火了是不是只有两种颜色支持?例如,在开始时我strokeColor = [UIColor blueColor].CGColor;
有
在中途我有一个深紫色,但我需要,例如,黄色。
是否可以向 CABasicAnimation 添加自定义渐变?
ios - CABasicAnimation:如果 CAShapeLayer 的位置没有改变怎么办?
我对CABasicAnimation主题真的很陌生。如果要将CAShapeLayer的x 位置从当前 x 位置动画到特定 x 位置,则应使用以下命令:
在我的例子中,self.shapeLayer 是一个 CAShapeLayer,用作一个简单的蒙版:
但是如果动画永远不会发生(x 位置没有改变)怎么办?我在我的代码中做错了什么?有什么建议、想法、例子吗?
非常感谢
iphone - iOS中的外部填充颜色
我有两个矩形(两个封闭的 sub cgpaths
)。矩形 B 很小,并且存在于矩形 A 内。其中的所有边。是否有直接的方法来填充矩形 B 外部的颜色区域。
CAShapeLayer fillExternalColor
类似的东西?如果不是直接方式,如何以编程方式执行此操作?
A - 紫色 B - 黄色
所以我试着画A,然后画B。我希望B是清晰的颜色(现在我放黄色)但后来我看到A的紫色......
我找到了给出 AnB 的 CGRectIntersection 方法和给出 AuB 的 CGRectUnion 方法。有没有一种方法可以给出 AuB - AnB 的其余区域?
objective-c - 根据内容大小设置 UIView 的大小
是否可以在 a 上绘制一些东西UIView
,然后在绘制完成后,将视图调整为与之前绘制的东西相同的大小?
例如,如果我在 a 上画一个圆UIView
,我想将 裁剪UIView
成我刚刚在视图上画的圆的尺寸。
更新
我正在研究使用 CAShapeLayer 作为可能的解决方案。有谁知道如何将 UIBezierPath 转换为 CAShapeLayer 然后设置 CAShapeLayer 的位置?
我努力了:
但这不起作用。
iphone - CAShapeLayer 画线
我正在(X,Y axis)
使用CAShapeLayer
.
我的问题是我想知道CAShapeLayer
(在我的情况下是行)当前处于什么视图。是否有任何CGIntersect
forCALayer
等CGRect
?我正在尝试使用核心动画而不是任何图表 API 创建图形。
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
,然后像这样更新,self
UIImageView 在哪里:
其他一切都运行顺利,只是这一组对象在 iPad 本身上运行时结结巴巴地跳来跳去。关于我做错了什么的任何想法?也许是用错误的方式移动它?我仍然对图层、框架和边界感到困惑。
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 :)
ios - 设置位置后接触 CAShapeLayer
我有一系列 UIBezierPaths,我将它们组合并添加到 CAShapeLayer。我需要检测用户在形状层上触摸的位置。但是,因为我更改了形状图层的位置,所以当我点击形状图层时,它不会检测到点击,因为它正在将点击坐标与贝塞尔路径原始位置的坐标进行比较。有谁知道我是否可以简单地点击 CAShapeLayer 的当前位置?而不是依赖其底层贝塞尔路径作为点击原点。
ios - iOS:CAShapeLayer 绘制非矩形图像并为其形状设置动画
我一直在阅读文档,CAShapeLayer
但我仍然不太明白。据我了解,Layer
它总是平坦的,它的大小总是一个矩形。
CAShapeLayer
另一方面,允许您定义一个不仅仅是矩形的层。它可以是圆形、三角形等,只要你使用它UIBezierPaths
。
我的理解到这里了吗?
我想到的是,例如,一个网球从屏幕边缘反弹(很容易),但我想显示一个不使用图像动画的小动画 - 我希望它显示一点“挤压“就像动画一样,因为它撞击屏幕边缘然后反弹。我没有使用网球图像。只是一个黄色填充的圆圈。
我在这里是正确的CAShapeLayer
吗?如果是这样,你能提供一个小例子吗?谢谢。