UIButton图像不会正确更改

时间:2010-12-29 16:54:20

标签: iphone objective-c

我有一个UIButton我改变了它的图像两次。

这两项更改都有效,但只有执行了一项。

e.g。第一个语句更改图像并且可以看到,但仅当第二个语句未运行时才会看到。如果我只运行两个语句,则只能看到最后一次图像更改。

似乎跳过了第一次图像更改。

这些执行在计时器中运行,我在第二次图像更改时略有延迟,希望避免此问题。

即使我改变了延迟,看起来有足够的时间看到图像变化,也没有视觉上的变化。

如何避免此问题并更改UIButtons图像两次,使两个更改都可见?

编辑 - >

[A1 setImage:[UIImage imageNamed:fileString] forState:UIControlStateNormal];            
[self performSelector:@selector(changeImage:withString:) withObject:A1 withObject:fileString2];

我称之为

 -(void) changeImage: (UIButton *) button withString: (NSString *) string
 {
   [button setImage:[UIImage imageNamed:string] forState:UIControlStateNormal];
 }

 -(void) startInvocation: (UIButton *) button withString: (NSString *) string
 {
     NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:
                            [self methodSignatureForSelector:@selector(changeImage:withString:)]];
     [invocation setTarget:self];
     [invocation setSelector:@selector(changeImage:withString:)];
     [invocation setArgument:button atIndex:2];
     [invocation setArgument:string atIndex:3];
     [NSTimer scheduledTimerWithTimeInterval:0.15f invocation:invocation repeats:NO];
}

由于

1 个答案:

答案 0 :(得分:1)

如果在同一事件循环中更改图像两次,则只能看到第二张图像。设置第一个图像然后启动NSTimer并对事件进行编程以设置第二个图像。你应该看到改变。

-(void)switchImage {
    image.image = [UIImage imageNamed:@"dai00003.jpg"];    
}

-(IBAction) run {
    image.image = [UIImage imageNamed:@"dai00001.jpg"];
    [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(switchImage) userInfo:nil repeats:NO];
}