如何制作UIButton“闪光灯”(发光,或瞬间改变图像)

时间:2010-05-13 00:04:20

标签: iphone uibutton

我尝试将图像切换为黑色然后使用睡眠(1)让它回到原始图像,但睡眠在正确的时间不起作用,我甚至看不到黑色闪光它如此之快。

[blueButton setImage:[UIImage imageNamed:@“black.png”] forState:UIControlStateNormal]; 睡眠(3); [blueButton setImage:[UIImage imageNamed:@“blue.png”] forState:UIControlStateNormal];

我只是想让它给这个按钮指示一下。有什么想法吗?感谢。

3 个答案:

答案 0 :(得分:3)

我认为在这种情况下使用NSTimer是过度的。

UIButton公开了一个名为 imageView 的便捷属性,可以访问底层。

假设您的按钮名为 recButton ,您可以按如下方式准备动画:

recButton.imageView.animationImages = [NSArray arrayWithObjects:[UIImage imageNamed:@"recButtonOFF"], [UIImage imageNamed:@"recButtonON"], nil];
recButton.imageView.animationRepeatCount = 0;
recButton.imageView.animationDuration = 1.0;

然后使用以下内容在您设计的选择器中开始/停止动画:

        [recButton.imageView startAnimating]; //start the animation

        ...

        [recButton.imageView stopAnimating]; //stop the animation

答案 1 :(得分:2)

调用计时器以在给定时间间隔后通知您:

[+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)seconds target:(id)target selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)repeats][1]

给它一个简单的方法作为选择器,它将图像改回蓝色。

[blueButton setImage:[UIImage imageNamed:@"black.png"] forState:UIControlStateNormal];
[NSTimer timerWithTimeInterval:yourTimeInterval target:self selector:@selector(changeButtonBack:) userInfo:nil repeats:NO];

-(void) changeButtonBack:(id)sender{
    [blueButton setImage:[UIImage imageNamed:@"blue.png"] forState:UIControlStateNormal];
}

现在,在您指定的任何时间间隔之后,将调用此方法,按钮将返回蓝色!

注意:进行此调用后,代码将继续执行。这称为设置回调,因为您的代码一直在执行,并且在指定的时间之后,系统回调并告诉您执行指定的功能

如果你想在不同的地方有不同的行为,你可以指定不同的选择器(读取:要回调的方法),或者你可以传入某种对象作为userInfor参数,我在示例中将其设置为nil。然后当你回电话时,检查userInfo对象的值,根据它是什么做你想做的。

答案 2 :(得分:0)

您需要使用NSTimer才能更改图像,然后安排计时器在3秒后再次更改图像。

sleep(3)不起作用的原因是因为在从方法(函数)返回后,控件返回到运行循环之前,图像更新才会发生。