在功能完成之前,我无法隐藏按钮并设置图像

时间:2012-05-02 06:09:26

标签: iphone objective-c ios

我想在单击它时隐藏按钮loadImgButton。此按钮将调用以下方法:

- (IBAction)produceImage:(id)sender
{

    [loadImgButton setHidden:YES];

    [image1 setImage:[UIImage imageNamed:@"Fanny2.JPG"]];
    [image2 setImage:[UIImage imageNamed:@"Fanny3.JPG"]];

    NSLog(@"i am here");

    for (int i = 0; i < 100000; i++) {
        for(int j = 0;j < 10000; j++) {

        }
    }
}

The problem is that the button is not hidden and the image is not set until the function is finish. What is the reason cause this situation and how to fix it? Thanks!

6 个答案:

答案 0 :(得分:1)

UI的更新发生在运行循环中,setHidden等方法只是设置标志,以便以后可以更新UI。您可能希望查看“Is there a way to make drawRect work right NOW?”以了解强制UI立即更新的方法。但是,您可能更好地考虑其他方法来实现您需要的结果。

答案 1 :(得分:0)

- (IBAction)produceImage:(id)sender
{

     [loadImgButton setHidden:YES];

     // Call another function which download image with delay

    [self performSelector:@selector(image:) withObject:sender afterDelay:2];

}

- (IBAction)image:(id)sender
{
    [image1 setImage:[UIImage imageNamed:@"Fanny2.JPG"]];

    [image2 setImage:[UIImage imageNamed:@"Fanny3.JPG"]];

    NSLog(@"i am here");

    for (int i = 0; i < 100000; i++) {
        for(int j = 0;j < 10000; j++) {

        }
    }

}

答案 2 :(得分:0)

您可能希望使用动画块,以便在完成时运行您的功能。你的代码的问题是我相信setHidden只是发送一个请求,当系统到达它时执行。这就是它首先运行你的功能的原因。试试这个:

[UIView animateWithDuration:0.1 animations:^{

  [loadImgButton setHidden:YES];

} 
completion:^ (BOOL finished) {

 for (int i = 0; i < 100000; i++) {
    for(int j = 0;j < 10000; j++) {

    }
 }

}];

答案 3 :(得分:0)

如果你的按钮没有被隐藏,那么一旦你检查你的nib文件并检查你的按钮对象是否与文件onwer连接?

答案 4 :(得分:0)

创建一个新方法。

- (IBAction)produceImage:(id)sender

{

[loadImgButton setHidden:YES];

[self new];

} - (无效)新 {

[image1 setImage:[UIImage imageNamed:@"Fanny2.JPG"]];
[image2 setImage:[UIImage imageNamed:@"Fanny3.JPG"]];

NSLog(@"i am here");

for (int i = 0; i < 100000; i++) {
    for(int j = 0;j < 10000; j++) {

    }
}

}

答案 5 :(得分:0)

试试这个

-(IBAction)buttonPressed:(id)sender{

[(UIButton*)sender performSelectorInBackground:@selector(setHidden:) withObject:[NSNumber numberWithBool:YES]];
NSLog(@"heeere");

for (int i = 0; i < 100000; i++) {
    for(int j = 0;j < 10000; j++) {

    }
}

}