我希望我的startButton在淡入后会发光(参见下面的代码)。我的问题的标题不是最合适的,但我不知道如何用它来表达它。希望有快速解决方案。
让我的startButton过渡到屏幕:
-(void)transitionStartButton{
transition = YES;
CATransition *fromTop = [CATransition animation];
fromTop.duration = 1.0;
fromTop.type = kCATransitionMoveIn;
fromTop.subtype = kCATransitionFromBottom;
fromTop.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
[_startButton.layer addAnimation:fromTop forKey:@"changeTextTransition"];
transition = NO;
[self glowStartButton];
}
使按钮发光:
[self.startButton startGlowingWithColor:[UIColor whiteColor] intensity:0.8];
我试着简单地将它放在后面一个,但它不起作用(在startButton完成淡入之前发光)。 我希望在它停止褪色后开始发光。
感谢您的帮助!
答案 0 :(得分:2)
我认为你想使用setCompletionBlock:。这在CAAnimation之后执行(如下所示):
CATransaction setCompletionBlock:^{
[self.startButton startGlowingWithColor:[UIColor whiteColor] intensity:0.8];
}];
我认为动画是在另一个线程上完成的,这就是它同时执行的原因。
更多帮助: http://samplecodebank.blogspot.com/2013/06/CATransaction-setCompletionBlock-example.html
答案 1 :(得分:1)
假设你已经编写了“startGlowingWithColor:
”方法,听起来你真正需要的是一个重复的NSTimer,你在淡入结束时就会开始。在那个计时器方法中,你可以在做发光动画之前确定“transition == NO
”。
我建议使用NSTimer的方法:
scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:
确保将“repeats:
”参数设置为YES,并为计时器保留属性(或ivar),以便在准备杀死它时使其无效(取消)。 / p>
已编辑添加:
你说你已经实现了这个:
faded = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(startGlowingWithColor:)
userInfo:startGlowingWithColor:[[UIColor whiteColor] intensity:0.8] repeats:YES];
在glowStartButton
方法中使用此位:
[[self.startButton startGlowingWithColor:[(NSTimer *)faded] ];
你真正想做的是:
NSDictionary *userInfoDict = [[NSDictionary alloc] initWithObjectsAndKeys: [UIColor whiteColor], @"color", [NSNumber numberWithFloat:0.8f], @"intensity", nil];
faded = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(startGlowingWithColor:)
userInfo:userInfoDict repeats:YES];
(您正在错误地设置userInfo字典。)
并在:
-(void)startGlowingWithColor:(NSTimer *)timer
{
NSDictionary *userInfoDict = timer.userInfo;
if(userInfoDict)
{
float intensity = [[userInfoDict objectForKey:@"intensity"] floatValue];
UIColor *color = [userInfoDict objectForKey:@"color];
...
...