在iOS中x秒后从UIButton更改UIImage
我正在尝试在1秒后从uibutton更改uiimage。我试着用线睡觉在iOS中x秒后从UIButton更改UIImage,ios,iphone,objective-c,uibutton,uiimage,Ios,Iphone,Objective C,Uibutton,Uiimage,我正在尝试在1秒后从uibutton更改uiimage。我试着用线睡觉 [button1 setImage:[UIImage imageNamed:@"sameThing.png"] forState:UIControlStateNormal]; [NSThread sleepForTimeInterval:1]; [button1 setImage:[UIImage imageNamed:@"interrogation.png"] forState:UIControlStateNorma
[button1 setImage:[UIImage imageNamed:@"sameThing.png"] forState:UIControlStateNormal];
[NSThread sleepForTimeInterval:1];
[button1 setImage:[UIImage imageNamed:@"interrogation.png"] forState:UIControlStateNormal];
但是图像没有改变,线程正常执行
谢谢你的建议试试这个
[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
});
}
试试这个
[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
});
}
这不是你在iOS上做这些事情的方式。首先,让主线程睡眠是个坏主意。您将阻止(冻结)应用程序的用户界面一秒钟。相反,您必须计划稍后执行第二个方法调用 您可以定义一个新方法:
- (void)updateButtonWithImageNamed:(NSString *)imageName {
[button1 setImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal];
}
然后像这样安排:
[self performSelector:@selector(updateButtonWithImageNamed:)
withObject:@“interrogation.png"
afterDelay:1.0f];
这不是你在iOS上做这些事情的方式。首先,让主线程睡眠是个坏主意。您将阻止(冻结)应用程序的用户界面一秒钟。相反,您必须计划稍后执行第二个方法调用 您可以定义一个新方法:
- (void)updateButtonWithImageNamed:(NSString *)imageName {
[button1 setImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal];
}
然后像这样安排:
[self performSelector:@selector(updateButtonWithImageNamed:)
withObject:@“interrogation.png"
afterDelay:1.0f];
作为
performSelector:WithObject:afterDelay
的替代方法,您可以使用GDC的dispatch\u 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\u时,Xcode中已经定义了一个代码段来执行此操作。
好处是,您不必定义新方法。缺点是。作为性能选择器:WithObject:afterDelay
的替代方案,您可以在之后使用GDC的调度:
[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\u时,Xcode中已经定义了一个代码段来执行此操作。
好处是,您不必定义新方法。缺点是