在 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标签

UIButton 点击​​后从 UITextfield 捕获文本

UIButton 在 iOS 5.x 中不起作用,在 iOS 6.x 中一切正常

一旦在情节提要中设置了 UIButton,iOS 9.2 就无法以编程方式更改它的标题

以编程方式更改UIButton的标题颜色,其标题设置为iOS 7中的属性