在 iOS 中 x 秒后从 UIButton 更改 UIImage
Posted
技术标签:
【中文标题】在 iOS 中 x 秒后从 UIButton 更改 UIImage【英文标题】:Change UIImage from UIButton after x seconds in iOS 【发布时间】:2013-12-17 16:21:27 【问题描述】:我正在尝试在 1 秒后从 uibutton 更改 uiimage。我试过用
来睡眠线程[button1 setImage:[UIImage imageNamed:@"sameThing.png"] forState:UIControlStateNormal];
[NSThread sleepForTimeInterval:1];
[button1 setImage:[UIImage imageNamed:@"interrogation.png"] forState:UIControlStateNormal];
但是图像没有变化,线程正常执行 感谢您的建议
【问题讨论】:
【参考方案1】:试试这个
[self performSelector:@selector(updateBtnImage:)
withObject: someObject
afterDelay:1];
-(void) updateBtnImage: (id) obj
//Set image here
//If still not updating image here dispatch block on main thread manually like this
dispatch_async(dispatch_get_main_queue(),
^
//Set image in this block
);
【讨论】:
【参考方案2】:这不是你在 ios 上做这些事情的方式。首先,让主线程休眠是个坏主意。您将阻止(冻结)应用程序的用户界面一秒钟。相反,您必须安排稍后执行第二个方法调用。
你可以定义一个新方法:
- (void)updateButtonWithImageNamed:(NSString *)imageName
[button1 setImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal];
然后像这样安排它:
[self performSelector:@selector(updateButtonWithImageNamed:)
withObject:@“interrogation.png"
afterDelay:1.0f];
【讨论】:
【参考方案3】:作为performSelector:WithObject:afterDelay
的替代品,您可以使用GDC 的dispatch_after
:
[button1 setImage:[UIImage imageNamed:@"sameThing.png"] forState:UIControlStateNormal];
double delayInSeconds = 1.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void)
[button1 setImage:[UIImage imageNamed:@"interrogation.png"] forState:UIControlStateNormal];
);
当您输入dispatch_after
时,Xcode 中已经定义了一个 sn-p 来执行此操作。
好处是您不必定义新方法。缺点是you must be careful with retain circles in your blocks。
【讨论】:
以上是关于在 iOS 中 x 秒后从 UIButton 更改 UIImage的主要内容,如果未能解决你的问题,请参考以下文章
如何在 15 秒后从服务中启动处理程序以防止应用程序睡眠并将位置发送到 Web 服务?
UIButton 点击后从 UITextfield 捕获文本
UIButton 在 iOS 5.x 中不起作用,在 iOS 6.x 中一切正常