在目标c Xcode按下按钮改变UIImages

时间:2012-03-09 01:10:18

标签: iphone

当我按下按钮时,我希望第一张图像显示在UIImageView中,停留一小段时间,然后显示下一张图像。一段时间后才显示第二张图像。第一张图片永远不会出现。

//  TestProjectViewController.m
//  Created by Jack Handy on 3/8/12.

#import "TestProjectViewController.h"

@implementation TestProjectViewController

@synthesize View1= _view1;
@synthesize yellowColor = _yellowColor;
@synthesize greenColor = _greenColor;


    - (IBAction)button:(id)sender {

        _greenColor = [UIImage imageNamed: @"green.png"];
             _view1.image = _greenColor;

    [NSThread sleepForTimeInterval:2];

        _yellowColor = [UIImage imageNamed: @"yellow.png"];
             _view1.image = _yellowColor;

}
@end

2 个答案:

答案 0 :(得分:0)

你可以尝试放置

 _yellowColor = [UIImage imageNamed: @"yellow.png"];
             _view1.image = _yellowColor;

而不是

[NSThread sleepForTimeInterval:2];

称之为

[self performSelector:@selector(changeColor) withObject:nil afterDelay:2];

答案 1 :(得分:0)

这里的问题是你在操作系统有机会绘制之前替换图像。由于所有这三个操作:更改图像,等待2秒,再次更改图像)在按钮操作返回之前发生,您正在阻止主线程执行,从而刷新屏幕。所以,发生的事情是,在2秒之后,屏幕会根据您最近放置的图像进行绘制。

您需要单独进行等待。有三种典型的方法可以做到这一点,每种方法都有其优点: - 使用-performSelector:withObject:afterDelay:向自己发送延迟消息 - 生成另一个线程或使用调度队列在后台运行一个线程进行睡眠,然后从那里将消息发送到主线程 - 或者,使用计时器。

我的建议是使用计时器,因为如果您需要做一些事情,例如移动到另一个屏幕,它很容易被取消。

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target: self selector: @selector(updateColor:) userInfo: nil repeats: NO];
// store the timer somewhere, so that you can cancel it with
// [timer invalidate];
// later as necessary

然后再说:

-(void)updateColor:(NSTimer*)timer
{
    _yellowColor = [UIImage imageNamed: @"yellow.png"];
    _view1.image = _yellowColor;
}

如果您希望颜色交替,您可以为重复项传递YES:创建代码中的值,然后将-updateColor:更改为替代...或移至下一种颜色。