问题标签 [cakeyframeanimation]

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

iphone - 使图像仅跟随 CGPath 的一部分

我意识到让图像在 iPhone 上遵循预先确定的路径并不是很困难(见这里),但我想知道图像是否可能只遵循部分路径。例如,如果我有一条从 A 到 B 的路径,我如何让图像仅以 1/4 的方式向 B 移动?我在下面画了一张图。

我考虑过的一种方法是在只有 1/4 长的旧路径上绘制一条新的透明路径。但是,如果没有 1/4 的路径,这是不可能的。还有其他想法吗?

谢谢

在此处输入图像描述

0 投票
2 回答
621 浏览

iphone - CAKeyFrameAnimation 不重复

嗨,我有一个 CAKeyFrameAnimation 比例,它使对象从全尺寸 (1) 淡化到几乎没有 (0.01)

然后这被称为:

它似乎隐藏了对象,但在让它再次以全尺寸重新出现一瞬间,这破坏了淡入淡出到小/无效果:P

如何阻止动画返回到第 1 帧以调用“animationDidStop”?谢谢!

0 投票
10 回答
37876 浏览

ios - CoreAnimation - 不透明度淡入和淡出动画不起作用

我正在尝试创建一个相当简单的 CoreAnimation 以在AVComposition. 我的目标是创建一个CALayer通过各种子层淡入和淡出标题,然后淡入淡出图像的效果。基本上是幻灯片。这正在使用 .mov 导出到 .mov AVAssetWriter

在 WWDC 2011 AVEditDemo 的帮助下,我已经能够获得出现的标题和图像。问题是它们都同时出现在屏幕上!

我创建了不透明度为 0.0 的每一层。然后我添加了一个CABasicAnimation将它们从 0.0 淡化到 1.0,使用以下代码:

问题似乎是“beginTime”属性。“1.0”意味着延迟,因此它在动画开始后 1 秒开始。但是,它立即出现在屏幕上。淡出动画

对于淡出,此代码的反面只是将 fromValue 更改为 1.0,将 toValue 更改为 0.0。它的开始时间为 4.0 并且运行良好。

我正在使用以下内容来创建animatedTitleLayer

动画中的图像淡入淡出的 beginTime 间隔为 5 秒。就像标题一样,它们的淡出动画效果很好。

任何帮助将不胜感激!

干杯!

编辑

答案都很有帮助,但最终我发现只能将一个动画添加到CALayer. 淡出动画正在工作,因为它是最后一个添加的。

然后我尝试了一个 CAAnimationGroup,但这不起作用,因为我正在修改相同的键值路径。

所以我意识到 aCAKeyframeAnimation最适合这个。只有我对此也有一些困难!代码现在可以淡入淡出,但不会淡出。我尝试了各种填充模式,更改了持续时间等。无法使其工作!

这是我的代码:

0 投票
1 回答
402 浏览

objective-c - 为什么 CATextLayer 对象的 CAKeyFrameAnimation 不一致?

目的是什么:按钮单击请求 CATextLayer 对象的字符串值进行动画处理,直到被另一个按钮单击请求停止。有两个单独的按钮负责这些操作,这样操作就不会混淆。

实际情况:在播放请求中,有几次textLayer的字符串没有动画,其字符串值保持不变,同时显示分配的“0”(如上图)。在这种情况下,动画永远不会被初始化并分配给 CATextLayer 对象。但是,错误并不一致。CATextLayer 对象将显示适当的字符串值时,也有几个实例。如果连续单击按钮,成功率大约是看到 CATextLayer 对象为其字符串值设置动画的 70%。是否有任何场景可以绕过 addAnimation 方法的代码行?

感谢您对问题的任何和所有帮助。提前致谢!

0 投票
4 回答
1953 浏览

iphone - 删除 CAKeyframeAnimation 不会释放内存

我将 CAKeyframeAnimation 添加到 ImageView 的图层中,以表示图像的动画:

当我想开始动画时,我调用:

动画结束后,我想完全删除它并释放它的内存。

这样做并使用 Instruments-Activity Monitor,除非我释放完整的 imageView,否则不会释放内存。

如何在不破坏 UIImageView 的情况下释放动画内存???

0 投票
2 回答
4120 浏览

ios - 发生 uiscrollview 事件时未触发 NSTimer

我有一个 UIImageView 放置在 UIScrollView 中,基本上这个 UIImageView 拥有非常大的地图,并在带有“箭头”指向导航方向的预定义路径上创建动画。

但是,每当发生 uiscrollevents 时,我认为 MainLoop 会冻结并且 NSTimer 不会被触发,并且动画会停止。

在 UIScrollView、CAKeyFrameAnimation 或 NSTimer 上是否有任何现有的属性可以解决这个问题?

0 投票
1 回答
249 浏览

ios - CAKeyFrameAnimation 在没有任何线索的情况下失败

这是我下面的代码部分,我希望在不透明度上实现动画以在按钮上显示呼吸效果。

实际上,我需要知道呼吸动画停止才能删除两个CALayer。但是,我得到 flag is NO in animationDidStop(),这表明动画没有正确完成,并且没有显示呼吸动画。然后,我尝试不调用[self removeBreathAnimationLayers]删除两个CALayer,动画效果很好。

有人对这个问题有什么建议吗?我真的需要知道动画成功停止才能做其他事情。

感谢您的回复。非常感谢!

-罗比

0 投票
3 回答
5820 浏览

ios - UIImageView上的iOS CAKeyframeAnimation旋转模式

我正在尝试沿贝塞尔路径移动的 UIImageView 对象位置的关键帧动画。这张图片显示了动画之前的初始状态。蓝线是路径 - 最初是直线向上移动,浅绿色框是初始边界框或图像,深绿色“幽灵”是我正在移动的图像:

初始状态

当我将 rotationMode 设置为 的动画开始时nil,图像在整个路径中保持相同的方向,如预期的那样。

但是,当我将 rotationMode 设置为 的动画开始时kCAAnimationRotateAuto,图像会立即逆时针旋转 90 度,并在整个路径中一直保持这个方向。当它到达路径的末端时,它会以正确的方向重绘(它实际上显示了我在最终位置重新定位的 UIImageView)

在此处输入图像描述

我天真地期望rotationMode会将图像定向到路径的切线而不是法线,尤其是当Apple docs for the CAKeyframeAnimation rotationMode state

确定沿路径设置动画的对象是否旋转以匹配路径切线。

那么这里的解决方案是什么?我是否必须将图像顺时针预旋转 90 度?或者有什么我想念的吗?

谢谢你的帮助。


3月2日编辑

我使用仿射旋转在路径动画之前添加了一个旋转步骤,例如:

然后在路径动画之后,重置旋转:

这使得图像以预期的方式跟随路径。但是,我现在遇到了图像闪烁的另一个问题。我已经在寻找这个 SO 问题中闪烁问题的解决方案:

iOS CAKeyFrameAnimation 缩放在动画结束时闪烁

所以现在我不知道我是否让事情变得更好或更糟!


编辑 3 月 12 日

虽然 Caleb 指出是的,但我确实必须预先旋转我的图像,但 Rob 提供了一个很棒的代码包,几乎完全解决了我的问题。Rob 唯一没有做的事情是补偿我的资产以垂直而不是水平方向绘制,因此在制作动画之前仍需要将它们预旋转 90 度。但是,嘿,我必须做一些工作才能让事情正常运行,这是唯一公平的。

因此,为了满足我的要求,我对 Rob 的解决方案的细微改动是:

  1. 当我添加 UIView 时,我预先旋转它以抵消通过设置添加的固有旋转rotationMode

    theImage.transform = CGAffineTransformMakeRotation(90*M_PI/180.0);

  2. 我需要在动画结束时保持该旋转,因此在定义完成块后,我不只是用新的比例因子爆破视图的变换,而是根据当前变换构建比例:

    theImage.transform = CGAffineTransformScale(theImage.transform, scaleFactor, scaleFactor);

这就是我所要做的,让我的形象按照我的预期走!


编辑 3 月 22 日

我刚刚向 GitHub 上传了一个演示项目,该项目展示了对象沿贝塞尔路径的移动。代码可以在PathMove找到

我还在我的博客“在 iOS 中沿贝塞尔路径移动对象”中写到了它

0 投票
3 回答
8621 浏览

ios - iOS CAKeyFrameAnimation 缩放动画结束时闪烁

在关键帧动画的另一项测试中,我将theImage沿贝塞尔路径移动 UIImageView(称为 我的初始代码中包含这些元素来启动动画:

然后,当动画完成时,我想保留更大尺寸的图像,所以我实现:

这一切都有效..有点。问题是动画结束时会theImage短暂闪烁 - 足以让它看起来很糟糕。我猜这是动画结束时的过渡,我将变换设置为新大小。

在对此进行试验时,我尝试了一种稍微不同的上述形式,但仍然得到相同的闪烁:

但是当我以与原始大小相同的动画结束时,没有闪烁:

所以我最大的问题是如何在没有闪烁的情况下为该图像设置动画,并在动画结束时以不同的大小结束?


3月2日编辑

我最初的测试是放大图像。我只是尝试缩小它(IE scaleFactor = 0.4)并且闪烁更加明显,并且对于我所看到的更加明显。这是事件的顺序:

  1. 原始大小的图像被绘制在屏幕上的起始位置。
  2. 当图像沿着路径移动时,它会平滑收缩。
  3. 完全缩小的图像到达路径的末端。
  4. 然后以原始大小绘制图像。
  5. 最终以缩小后的尺寸绘制图像。

所以这似乎是我看到的第 4 步闪烁。


编辑 3 月 22 日

我刚刚向 GitHub 上传了一个演示项目,该项目展示了对象沿贝塞尔路径的移动。代码可以在PathMove找到

我还在我的博客“在 iOS 中沿贝塞尔路径移动对象”中写到了它

0 投票
1 回答
1055 浏览

ios - 使用 CoreAnimation 同步图像、文本和定位

我是一个动画初学者,并且已经用 CoreAnimation 试验了几天。如果这个问题没有意义,请随时警告我,但我正在努力实现以下目标。我有三个对象:

  • 一个应该是图像,按照给定的模式移动
  • 一个应该是交换两个图像的 UIImage
  • 一个应该是内容发生变化的文本(CATextLayer?)

这三个动作应该同步发生。

例如,考虑一个显示正弦函数的程序,例如心电图,在 -1 和 +1 之间振荡:然后第一张图像将根据当前值移动(-1,-0.9,-0.8,... 0, +0.1, +0.2, ... 1),交换图像将显示“+”表示正值,“-”表示负值,文本将在“Positive”和“Negative”之间交替显示。

我已经尝试过使用 CAAnimationGroup,但我显然遗漏了一些东西。一些代码:

现在......问题:

1)交换图像在每次交换时恢复为原始图像。因此,如果我交换 A->B,我会看到它在预期的持续时间内从 A 变为 B,但随后又恢复为 A。我已经阅读了一些关于 SO 的线程,但无法让它工作.

2)以定时的方式更改文本层的字符串......这个基础设施有可能吗?基本上,我试图让文本和交换图像在第一个图像移动后立即更改,如示例中所述。

3) 为 CABasicAnimation 设置委托没有任何效果,尽管它对 CAAnimationGroup 有效:因此,您不能为每个动画管理像 animationDidStop 这样的事件,而只能针对整个组。有没有其他方法可以做到这一点?

4) 从 3) 开始,是否可以使用 CAAnimationGroup 拦截事件以创建停止/启动行为?假设我想要播放/停止按钮,并从我离开的地方恢复动画?

作为一个决定性的问题,我只想知道是否有人做过类似的事情,最重要的是,这种做事方式(使用 CAAnimationGroup)是否真的是可行的方法,或者使用 CAKeyFrameAnimation 或其他方法是否更好。