【问题标题】:Change UIImage from UIButton after x seconds in iOS在 iOS 中 x 秒后从 UIButton 更改 UIImage
【发布时间】: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];

但是图像没有变化,线程正常执行 感谢您的建议

【问题讨论】:

    标签: ios iphone objective-c uibutton uiimage


    【解决方案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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-10-10
          • 1970-01-01
          • 2015-09-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-08-11
          • 2014-10-01
          相关资源
          最近更新 更多