gpt4 book ai didi

iphone - 如何在animationDidStop委托(delegate)中识别CAAnimation?

转载 作者:行者123 更新时间:2023-12-03 18:08:27 26 4
gpt4 key购买 nike

我遇到了一个问题,我有一系列重叠的 CATransition/CAAnimation 序列,所有这些序列我都需要在动画停止时执行自定义操作,但我只想要一个动画DidStop 的委托(delegate)处理程序。

但是,我遇到了一个问题,似乎没有一种方法可以唯一标识animationDidStop 委托(delegate)中的每个 CATransition/CAAnimation。

我通过作为 CAAnimation 的一部分公开的键/值系统解决了这个问题。

当您开始动画时,请使用 CATransition/CAAnimation 上的 setValue 方法来设置在animationDidStop 触发时使用的标识符和值:

-(void)volumeControlFadeToOrange
{
CATransition* volumeControlAnimation = [CATransition animation];
[volumeControlAnimation setType:kCATransitionFade];
[volumeControlAnimation setSubtype:kCATransitionFromTop];
[volumeControlAnimation setDelegate:self];
[volumeControlLevel setBackgroundImage:[UIImage imageNamed:@"SpecialVolume1.png"] forState:UIControlStateNormal];
volumeControlLevel.enabled = true;
[volumeControlAnimation setDuration:0.7];
[volumeControlAnimation setValue:@"Special1" forKey:@"MyAnimationType"];
[[volumeControlLevel layer] addAnimation:volumeControlAnimation forKey:nil];
}

- (void)throbUp
{
doThrobUp = true;

CATransition *animation = [CATransition animation];
[animation setType:kCATransitionFade];
[animation setSubtype:kCATransitionFromTop];
[animation setDelegate:self];
[hearingAidHalo setBackgroundImage:[UIImage imageNamed:@"m13_grayglow.png"] forState:UIControlStateNormal];
[animation setDuration:2.0];
[animation setValue:@"Throb" forKey:@"MyAnimationType"];
[[hearingAidHalo layer] addAnimation:animation forKey:nil];
}

在你的animationDidStop委托(delegate)中:

- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag{

NSString* value = [theAnimation valueForKey:@"MyAnimationType"];
if ([value isEqualToString:@"Throb"])
{
//... Your code here ...
return;
}


if ([value isEqualToString:@"Special1"])
{
//... Your code here ...
return;
}

//Add any future keyed animation operations when the animations are stopped.
}

另一方面,它允许您在键值配对系统中保留状态,而不必将其存储在委托(delegate)类中。代码越少越好。

请务必查看 Apple Reference on Key Value Pair Coding .

animationDidStop 委托(delegate)中是否有更好的 CAAnimation/CATransition 识别技术?

谢谢,--巴特加尔

最佳答案

巴特加尔的技术太复杂了。为什么不利用 addAnimation 中的 forKey 参数呢?它就是为了这个目的而设计的。只需取出对 setValue 的调用并将键字符串移至 addAnimation 调用即可。例如:

[[hearingAidHalo layer] addAnimation:animation forKey:@"Throb"];

然后,在animationDidStop回调中,您可以执行以下操作:

if (theAnimation == [[hearingAidHalo layer] animationForKey:@"Throb"]) ...

关于iphone - 如何在animationDidStop委托(delegate)中识别CAAnimation?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1255086/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com