问题标签 [catransaction]

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 投票
3 回答
11380 浏览

iphone - CAKeyframeAnimation 完成时如何指定选择器?

我正在使用 CAKeyframeAnimation 沿 CGPath 为视图设置动画。动画完成后,我希望能够调用其他方法来执行其他操作。有没有好的方法来做到这一点?

我已经看过使用 UIView 的 setAnimationDidStopSelector:,但是从文档看来,这似乎只适用于在 UIView 动画块(beginAnimations 和 commitAnimations)中使用时。为了以防万一,我也试了一下,但它似乎不起作用。

这是一些示例代码(这是在自定义 UIView 子类方法中):

我正在考虑的一种解决方法应该可行,但似乎不是最好的方法,是使用 NSObject 的 performSelector:withObject:afterDelay:。只要我将延迟设置为等于动画的持续时间,就应该没问题。

有没有更好的办法?谢谢!

0 投票
2 回答
1602 浏览

objective-c - 为什么我的 CATransaction 不遵守我设置的持续时间?

我正在将 iPhone 应用程序移植到 Mac OS X。此代码已在 iPhone 上成功使用:

Mac 版本使用 CATransaction 对动画进行分组,如下所示:

动画执行良好,但持续时间为 1.0 秒。我可以更改 setAnimationDuration: 调用任何内容,或者完全省略它,并且每次动画的持续时间仍然为 1.0 秒。我也不认为 setAnimationTimingFunction: 调用在做任何事情。但是, setCompletionBlock: 正在工作,因为该块在动画完成时正在执行。

我在这里做错了什么?

0 投票
2 回答
11048 浏览

iphone - 在 CATransaction 中为自定义 CALayer 属性设置动画

到目前为止,我已经能够为我的 CALayer 子类的自定义属性设置动画,这要归功于+ (BOOL)needsDisplayForKey:(NSString *)keyCABasicAnimations

然而事实证明,链接动画会变得非常棘手,因为所有代码都发生在一个animationDidStop:finished:方法中。

所以我想切换到,CATransactions因为它们支持新的块语法,这将允许我用+ (void)setCompletionBlock:(void (^)(void))block.

但在我看来,CATransaction只能为所谓的“动画属性”设置动画,并且它不适用于我的自定义图层属性,即使needsDisplayForKey:实现了该方法。

那么有没有办法在 a 中制作自定义属性以CALayer进行动画处理CATransaction

编辑: 我的意图是做一些事情:

myProperty 值的更新newValue不是动画的。我试图 actionForLayer:forKey:在管理 myLayer 的视图中实现返回一个CABasicAnimation. 但actionForLayer:forKey:永远不会用 key 调用myProperty。是的,myLayerview.layer只是一个子层,是的,我将委托设置myLayer为包含视图。

0 投票
2 回答
1344 浏览

objective-c - CALayer - 动画层大小阻止动画运行

我有一种方法可以放置一堆图层,然后同时定位和调整单个“激活”图层(基本上是用户单击的图层)。包括激活层在内的所有层都是较大层的子层。这是我的方法:

我遇到的问题真的很奇怪。使用上面的代码,没有任何动画运行(甚至不活动层的动画)。但只要我注释掉设置新帧大小和宽度的行,动画就会神奇地重新开始工作。

有什么理由应该发生这种情况吗?

0 投票
3 回答
5030 浏览

iphone - CA事务延迟

如何在核心动画中设置隐式动画的延迟?我很惊讶没有 kCATransactionAnimationDelay。

0 投票
2 回答
1869 浏览

serialization - 依次组合多个 CAAnimation

我正在阅读有关 CATransactions 的信息,然后认为这可能有助于解决我的问题。

这是我不想做的:我在同一层中有 3 个动画,它们都有自己的持续时间。我使用带有 CGMutablePathRef 的 CAKeyframeAnimation 创建动画。

比如说:

  • anim1 -> 持续时间 5s
  • anim2 -> 3s
  • anim3 -> 10s

现在我想按顺序对它们进行序列化。我尝试使用 CAAnimationGroup 但动画同时运行。我读到了 CATransaction,这是一个可能的解决方案吗?你能给我举个小例子吗?

感谢帮助 !

0 投票
1 回答
1143 浏览

performance - iOS Core-Animation:CATransaction / 插值变换矩阵的性能问题

我正在测试我的 iPhone 应用程序的性能:

问题:为什么禁用核心动画在新旧变换矩阵之间进行插值的默认行为会带来这样的性能提升?

他们可能在做什么,计算量如此之大?即使他们使用世界上最精细的技术在两个矩阵之间进行插值,我也不敢相信这会达到 5fps?!

我无法想象这个过程不是 M_resultant = k*M_last + (1.-k)*M_target

0 投票
2 回答
2619 浏览

iphone - 如何同时成功地为多个 CALayers 设置动画?

我成功地为单个图层设置动画,以沿屏幕上的任意路径更改其位置。我现在正试图多次复制这个动画,以产生某种东西在拐角处弯曲的错觉。我将代码放在 CATransaction 中,并将其放入循环中,为循环的每次迭代递增起始位置,然后在循环后提交 CATransaction。如果代码不在循环中(也就是说,只有一个图层被动画),那么我看到的效果是相同的,然后在动画结束时所有图层都会出现(在我的代表在动画结束时删除它们之前 animationDidStop )

我编写的代码如下所示:

其中 [board caclulatePath:s] 返回代表 CGPoints 的 NSValues 的 NSArray*。

我怎样才能达到我想要的效果(哪个是laser.png的多个副本遵循相同的路径)?[Laser.png 是一个 20px x 20px 的红色正方形];

0 投票
2 回答
22097 浏览

ios - +[CATransaction synchronize] 在事务中调用

如果我在从服务加载数据时关闭我的 iPad 应用程序,该应用程序会关闭,但随后会立即再次打开,而无需我做任何事情。在这一点上,我无能为力;我无法关闭应用程序,也无法与应用程序或设备交互。再次使用该设备的唯一方法是重新启动它。该应用程序不会崩溃,它只是禁用设备。

发生这种情况时,控制台中会在applicationWillResignActive和applicationDidEnterBackground之后出现 3 次以下行

如果应用程序崩溃几乎没问题,但设备完全无用的事实是一个大问题。如果我可以截获这个错误或以某种方式检测CATransaction 何时引发此问题,那很好。

有任何想法吗?

0 投票
1 回答
909 浏览

core-animation - 如何在调整父 NSView 的大小时将 CALayer 保持在同一位置?

想象一个小红框(CALayer实例)绘制在其父层(即层托管的根层)的左下角NSView

当父视图的框架发生变化时,红框应该保持在屏幕上的相同位置。我通过调整它相对于父视图左下角的位置来做到这一点。

问题是在某些情况下会闪烁,我可以看到在扩展框架的左下角绘制了红色框层,然后才显示在正确的位置。

我假设将框架和位置更改合并为一个CATransaction会使这两个更改一起进行,但这并不总是有效(文档说通过使用事务,动画将同时开始,但似乎仍然存在比赛有时情况)。

如何NSView在将子图层保持在其感知位置的同时调整父图层的框架?

示例和代码:

NSView 和盒子层

我自己的想法:

  1. 隐藏红框层,更新位置,再次显示

  2. 使用约束将其绑定到右上角。问题是这个偏移量也可能发生变化,我必须更新可能导致相同闪烁问题的约束。