我尝试将图像切换为黑色然后使用睡眠(1)让它回到原始图像,但睡眠在正确的时间不起作用,我甚至看不到黑色闪光它如此之快。
[blueButton setImage:[UIImage imageNamed:@“black.png”] forState:UIControlStateNormal]; 睡眠(3); [blueButton setImage:[UIImage imageNamed:@“blue.png”] forState:UIControlStateNormal];
我只是想让它给这个按钮指示一下。有什么想法吗?感谢。
答案 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)不起作用的原因是因为在从方法(函数)返回后,控件返回到运行循环之前,图像更新才会发生。