在iOS中x秒后从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

我正在尝试在1秒后从uibutton更改uiimage。我试着用线睡觉

[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中已经定义了一个代码段来执行此操作。
好处是,您不必定义新方法。缺点是