|
|
1
87
巴加的技术太复杂了。为什么不利用addAnimation中的forkey参数呢?它就是为了这个目的。只需取出对setValue的调用,并将键字符串移动到addAnimation调用。例如:
然后,在AnimationDidstop回调中,可以执行以下操作:
|
|
|
2
46
我只是想出了一个更好的方法来完成CAanimations的代码: 我为一个块创建了typedef:
以及用于向动画添加块的键:
然后,如果我想在CAAnimation完成后运行动画完成代码,我将自己设置为动画的代理,并使用setValue:forkey:
然后,我实现了一个animationdIdStop:finished:method,该方法检查指定键处的块,如果找到,则执行它:
这种方法的好处在于,可以在创建动画对象的同一位置编写清理代码。更好的是,由于代码是一个块,它可以访问在其定义的封闭范围内的局部变量。你不必费心设置用户信息字典或其他类似的胡说八道,也不必编写不断增长的动画:完成:当你添加不同类型的动画时,方法变得越来越复杂。 事实上,CAAnimation应该有一个内置的完成块属性,并且系统支持在指定完成块属性时自动调用它。但是,上面的代码只提供了几行额外代码,从而提供了相同的功能。 |
|
|
3
33
第二种方法只在将动画显式设置为 不 在运行前在完成时移除:
如果不这样做,动画将在完成之前被删除,回调将在字典中找不到它。 |
|
|
4
29
所有其他答案都太复杂了!为什么不添加自己的关键点来识别动画? 这个解决方案非常简单,你所需要的就是 为动画添加自己的关键点 (本例中的animationid) 插入此行以标识 动画1 :
这是为了确定 动画2 :
像这样测试:
它不需要任何实例变量 : |
|
|
5
12
为了明确上面所暗示的内容(以及在浪费了几个小时之后我来到这里的内容):不要期望看到您分配给您的原始动画对象通过
当动画结束时,因为
您可以依赖的是,为动画对象提供的键控值在与传递的复制动画对象中仍然具有等效值(但不一定是指针等效值)。
|
|
|
6
1
我可以看到大部分objc答案,我将根据上面的最佳答案为swift 2.3制作一个答案。 首先,最好将所有这些键存储在私有结构上,这样它是类型安全的,将来更改它不会给您带来恼人的错误,因为您忘记了在代码中到处更改它:
如您所见,我已经更改了变量/动画的名称,所以更清楚了。现在,在创建动画时设置这些关键点。
(…)
然后在动画停止时处理代理
|
|
|
7
0
imho使用苹果的关键价值是一种优雅的方式:它专门用于向对象添加特定于应用程序的数据。 另一种更不优雅的可能性是存储对动画对象的引用,并进行指针比较以识别它们。 |
|
|
8
0
让我检查2个cabasication对象是否是相同的动画, 我使用keypath函数来实现这一点。 如果([AnimationA KeyPath]==[AnimationB KeyPath])
|
|
|
9
0
我喜欢使用
这两个相当:
有了这个:
在委托方法中:
|
|
|
10
0
Xcode 9 Swift 4.0代码 可以使用键值将添加到AnimationDidstop委托方法中返回的动画的动画关联起来。 声明字典以包含所有活动动画和相关完成:
添加动画时,请为其设置关键点:
在AnimationDidStop中,魔法发生了:
|