当我按下按钮时,我希望第一张图像显示在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
答案 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:
更改为替代...或移至下一种颜色。