问题标签 [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.
iphone - 使图像仅跟随 CGPath 的一部分
我意识到让图像在 iPhone 上遵循预先确定的路径并不是很困难(见这里),但我想知道图像是否可能只遵循部分路径。例如,如果我有一条从 A 到 B 的路径,我如何让图像仅以 1/4 的方式向 B 移动?我在下面画了一张图。
我考虑过的一种方法是在只有 1/4 长的旧路径上绘制一条新的透明路径。但是,如果没有 1/4 的路径,这是不可能的。还有其他想法吗?
谢谢
iphone - CAKeyFrameAnimation 不重复
嗨,我有一个 CAKeyFrameAnimation 比例,它使对象从全尺寸 (1) 淡化到几乎没有 (0.01)
然后这被称为:
它似乎隐藏了对象,但在让它再次以全尺寸重新出现一瞬间,这破坏了淡入淡出到小/无效果:P
如何阻止动画返回到第 1 帧以调用“animationDidStop”?谢谢!
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
最适合这个。只有我对此也有一些困难!代码现在可以淡入淡出,但不会淡出。我尝试了各种填充模式,更改了持续时间等。无法使其工作!
这是我的代码:
objective-c - 为什么 CATextLayer 对象的 CAKeyFrameAnimation 不一致?
目的是什么:按钮单击请求 CATextLayer 对象的字符串值进行动画处理,直到被另一个按钮单击请求停止。有两个单独的按钮负责这些操作,这样操作就不会混淆。
实际情况:在播放请求中,有几次textLayer的字符串没有动画,其字符串值保持不变,同时显示分配的“0”(如上图)。在这种情况下,动画永远不会被初始化并分配给 CATextLayer 对象。但是,错误并不一致。CATextLayer 对象将显示适当的字符串值时,也有几个实例。如果连续单击按钮,成功率大约是看到 CATextLayer 对象为其字符串值设置动画的 70%。是否有任何场景可以绕过 addAnimation 方法的代码行?
感谢您对问题的任何和所有帮助。提前致谢!
iphone - 删除 CAKeyframeAnimation 不会释放内存
我将 CAKeyframeAnimation 添加到 ImageView 的图层中,以表示图像的动画:
当我想开始动画时,我调用:
动画结束后,我想完全删除它并释放它的内存。
这样做并使用 Instruments-Activity Monitor,除非我释放完整的 imageView,否则不会释放内存。
如何在不破坏 UIImageView 的情况下释放动画内存???
ios - 发生 uiscrollview 事件时未触发 NSTimer
我有一个 UIImageView 放置在 UIScrollView 中,基本上这个 UIImageView 拥有非常大的地图,并在带有“箭头”指向导航方向的预定义路径上创建动画。
但是,每当发生 uiscrollevents 时,我认为 MainLoop 会冻结并且 NSTimer 不会被触发,并且动画会停止。
在 UIScrollView、CAKeyFrameAnimation 或 NSTimer 上是否有任何现有的属性可以解决这个问题?
ios - CAKeyFrameAnimation 在没有任何线索的情况下失败
这是我下面的代码部分,我希望在不透明度上实现动画以在按钮上显示呼吸效果。
实际上,我需要知道呼吸动画停止才能删除两个CALayer。但是,我得到 flag is NO in animationDidStop()
,这表明动画没有正确完成,并且没有显示呼吸动画。然后,我尝试不调用[self removeBreathAnimationLayers]
删除两个CALayer,动画效果很好。
有人对这个问题有什么建议吗?我真的需要知道动画成功停止才能做其他事情。
感谢您的回复。非常感谢!
-罗比
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 的解决方案的细微改动是:
当我添加 UIView 时,我预先旋转它以抵消通过设置添加的固有旋转
rotationMode
:theImage.transform = CGAffineTransformMakeRotation(90*M_PI/180.0);
我需要在动画结束时保持该旋转,因此在定义完成块后,我不只是用新的比例因子爆破视图的变换,而是根据当前变换构建比例:
theImage.transform = CGAffineTransformScale(theImage.transform, scaleFactor, scaleFactor);
这就是我所要做的,让我的形象按照我的预期走!
编辑 3 月 22 日
我刚刚向 GitHub 上传了一个演示项目,该项目展示了对象沿贝塞尔路径的移动。代码可以在PathMove找到
我还在我的博客“在 iOS 中沿贝塞尔路径移动对象”中写到了它
ios - iOS CAKeyFrameAnimation 缩放动画结束时闪烁
在关键帧动画的另一项测试中,我将theImage
沿贝塞尔路径移动 UIImageView(称为 我的初始代码中包含这些元素来启动动画:
然后,当动画完成时,我想保留更大尺寸的图像,所以我实现:
这一切都有效..有点。问题是动画结束时会theImage
短暂闪烁 - 足以让它看起来很糟糕。我猜这是动画结束时的过渡,我将变换设置为新大小。
在对此进行试验时,我尝试了一种稍微不同的上述形式,但仍然得到相同的闪烁:
但是当我以与原始大小相同的动画结束时,没有闪烁:
所以我最大的问题是如何在没有闪烁的情况下为该图像设置动画,并在动画结束时以不同的大小结束?
3月2日编辑
我最初的测试是放大图像。我只是尝试缩小它(IE scaleFactor = 0.4)并且闪烁更加明显,并且对于我所看到的更加明显。这是事件的顺序:
- 原始大小的图像被绘制在屏幕上的起始位置。
- 当图像沿着路径移动时,它会平滑收缩。
- 完全缩小的图像到达路径的末端。
- 然后以原始大小绘制图像。
- 最终以缩小后的尺寸绘制图像。
所以这似乎是我看到的第 4 步闪烁。
编辑 3 月 22 日
我刚刚向 GitHub 上传了一个演示项目,该项目展示了对象沿贝塞尔路径的移动。代码可以在PathMove找到
我还在我的博客“在 iOS 中沿贝塞尔路径移动对象”中写到了它
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 或其他方法是否更好。