如何使一个方法运行另一个?

时间:2014-02-18 18:01:53

标签: iphone objective-c

我希望我的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完成淡入之前发光)。 我希望在它停止褪色后开始发光。

感谢您的帮助!

2 个答案:

答案 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];
         ...
         ...