Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iPhone如何:按设定的间隔一个接一个消失的UI按钮_Iphone_Objective C_Performance_Uibutton - Fatal编程技术网

iPhone如何:按设定的间隔一个接一个消失的UI按钮

iPhone如何:按设定的间隔一个接一个消失的UI按钮,iphone,objective-c,performance,uibutton,Iphone,Objective C,Performance,Uibutton,我正在创建一个智力竞赛游戏,但我想不出最好的方法来实现每隔3秒钟一个一个消失的UIButtons。我可以让第一个UIButton在3秒钟后消失,但随后的UIButton需要相当长的时间 我相信问题是,我的代码变得更加低效,我使每一个UIButton消失。以下方法是我通过重复NSInterval调用的方法,以使每个后续UIButton消失: -(无效)隐藏按钮 { 内纽扣 while(buttonNum != -1) { buttonNum = rand() % 5; if(bu

我正在创建一个智力竞赛游戏,但我想不出最好的方法来实现每隔3秒钟一个一个消失的UIButtons。我可以让第一个UIButton在3秒钟后消失,但随后的UIButton需要相当长的时间

我相信问题是,我的代码变得更加低效,我使每一个UIButton消失。以下方法是我通过重复NSInterval调用的方法,以使每个后续UIButton消失:

-(无效)隐藏按钮 { 内纽扣

while(buttonNum != -1)
{
    buttonNum = rand() % 5;

    if(buttonNum != [quiz correctNumber])
    {
        if(buttonNum == 0 && [buttonOne isEnabled] == YES)
        {
            [UIView beginAnimations:@"buttonFades" context:nil];
            [UIView setAnimationDuration:0.5];
            [buttonOne setEnabled:NO];
            [buttonOne setAlpha:0.0];
            [UIView commitAnimations];
        }
        else if(buttonNum == 1 && [buttonTwo isEnabled] == YES)
        {
            [UIView beginAnimations:@"buttonFades" context:nil];
            [UIView setAnimationDuration:0.5];
            [buttonTwo setEnabled:NO];
            [buttonTwo setAlpha:0.0];
            [UIView commitAnimations];
        }
        else if(buttonNum == 2 && [buttonThree isEnabled] == YES)
        {
            [UIView beginAnimations:@"buttonFades" context:nil];
            [UIView setAnimationDuration:0.5];
            [buttonThree setEnabled:NO];
            [buttonThree setAlpha:0.0];
            [UIView commitAnimations];
        }
        else if(buttonNum == 3 && [buttonFour isEnabled] == YES)
        {
            [UIView beginAnimations:@"buttonFades" context:nil];
            [UIView setAnimationDuration:0.5];
            [buttonFour setEnabled:NO];
            [buttonFour setAlpha:0.0];
            [UIView commitAnimations];
        }
        else if(buttonNum == 4 && [buttonFive isEnabled] == YES)
        {
            [UIView beginAnimations:@"buttonFades" context:nil];
            [UIView setAnimationDuration:0.5];
            [buttonFive setEnabled:NO];
            [buttonFive setAlpha:0.0];
            [UIView commitAnimations];
        }

        buttonNum = -1;
    }
}

}

当你只剩下,比如说,两个按钮时,因为你仍然会生成一个介于0和4之间的随机数,你只有20%的机会让一个按钮消失——20%的时候你什么也不做,因为随机数与正确的匹配,在这些情况下,60%的时间你什么也不做,因为它匹配一个已经消失的按钮


我建议您保留一个数组,最初填充有4个按钮的引用,这些按钮实际上可能会消失(不要麻烦将正确的数字1放在那里,因为您无论如何都不会消失它)。在函数中,当数组中还剩下N个按钮时,生成一个介于0和N-1之间的随机数,这样就可以用有效且简洁的代码将相应的按钮消失——然后(如果消失的按钮不是数组中的最后一个按钮)将其与最后一个按钮交换,并按1递减N。当然,当N为1时,也不需要随机数。

当你只剩下,比如说,两个按钮时,因为你仍然生成一个介于0和4之间的随机数,你只有20%的机会让一个按钮消失——20%的时候你什么都不做,因为随机数与正确的匹配,在这些情况下,60%的时间你什么也不做,因为它匹配一个已经消失的按钮


我建议您保留一个数组,最初填充有4个按钮的引用,这些按钮实际上可能会消失(不要麻烦将正确的数字1放在那里,因为您无论如何都不会消失它)。在函数中,当数组中还剩下N个按钮时,生成一个介于0和N-1之间的随机数,这样就可以用有效且简洁的代码将相应的按钮消失——然后(如果消失的按钮不是数组中的最后一个按钮)将其与最后一个按钮交换,并按1递减N。当然,当N为1时,也不需要随机数。

Alex Martelli给出了一个很好的答案。另一种可能是将单独的对象buttonOne、buttonTwo等替换为单个按钮数组button[5],并用以下内容替换大循环:

do {
   buttonNum = rand() % 5;
} while (buttonNum == [quiz correctNumber] || ![buttons[buttonNum] isEnabled]);

[buttons[buttonNum] setEnabled:NO]; // Doesn't need to be in animation block
[UIView beginAnimations:@"buttonFades" context:nil];
[UIView setAnimationDuration:0.5];
[buttons[buttonNum] setAlpha:0.0];
[UIView commitAnimations];

***Dan,下面:仍然需要一些东西来随机调整按钮隐藏的顺序,并确保正确的答案没有被隐藏,但除此之外,这也是一个很好的解决方案。

Alex Martelli给出了一个很好的答案。另一种可能是将单独的对象buttonOne、buttonTwo等替换为单个按钮数组button[5],并用以下内容替换大循环:

do {
   buttonNum = rand() % 5;
} while (buttonNum == [quiz correctNumber] || ![buttons[buttonNum] isEnabled]);

[buttons[buttonNum] setEnabled:NO]; // Doesn't need to be in animation block
[UIView beginAnimations:@"buttonFades" context:nil];
[UIView setAnimationDuration:0.5];
[buttons[buttonNum] setAlpha:0.0];
[UIView commitAnimations];

***Dan,下图:仍然需要一些东西来随机调整按钮隐藏的顺序,并确保正确的答案没有被隐藏,但除此之外,这也是一个很好的解决方案。

另一种让按钮以设定的间隔消失的方法是使用

- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay
方法。要使用此功能,您需要定义一个函数,使按钮在调用时消失:

-(void)hideButton:(UIButton *)button{
button.enabled = NO;
[UIView beginAnimations:@"buttonFades" context:nil];
[UIView setAnimationDuration:0.5];
[button setAlpha:0.0];
[UIView commitAnimations];
}
然后,您将在循环中吐出这些延迟选择器,如下所示:

for(int i=0; i<numButtons; i++){
    [self performSelector:@selector(mySelector:) withObject:buttons[i] afterDelay:3*i+3]
}

for(int i=0;i另一种使按钮按设定间隔消失的方法是使用

- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay
方法。要使用此方法,您需要定义一个函数,使按钮在调用时消失:

-(void)hideButton:(UIButton *)button{
button.enabled = NO;
[UIView beginAnimations:@"buttonFades" context:nil];
[UIView setAnimationDuration:0.5];
[button setAlpha:0.0];
[UIView commitAnimations];
}
然后,您将在循环中吐出这些延迟选择器,如下所示:

for(int i=0; i<numButtons; i++){
    [self performSelector:@selector(mySelector:) withObject:buttons[i] afterDelay:3*i+3]
}
for(int i=0;i