使用与arc4random相同的方法使计数器使按钮保持静止。 (IOS)

时间:2013-01-28 06:55:18

标签: iphone ios xcode counter arc4random

我有一个按钮,每次按下时我都想在屏幕上随机显示。我使用arc4random来实现这一点。但是一旦我将一个计数器合并到这个方法中,随机部分就会停止工作。任何想法为什么会发生这种情况或如何解决它将非常感谢,提前感谢!我的代码如下。

-(IBAction)random:(id)sender{

    int xValue = arc4random() % 320;
    int yValue = arc4random() % 480;

    button.center = CGPointMake(xValue, yValue);

    counter = counter + 1;
    score.text = [NSString stringWithFormat:@"Score: %i", counter];


}

1 个答案:

答案 0 :(得分:1)

这实际上不是揭示问题的计数器,而是标签中值的设置。这是自动布局的问题,当您设置标签的值时,它会强制显示视图,而自动布局功能会将按钮移回其原始位置。最简单的解决方法是关闭自动布局,这是通过IB中的文件检查器(最左边的那个)完成的 - 只需取消选中“使用Autolayout”框。

看起来发生的事情发生得太快了,但是如果你将代码更改为此(自动布局仍然打开),你会看到按钮移动,然后跳回:

-(IBAction)random:(id)sender{
    int xValue = arc4random() % 320;
    int yValue = arc4random() % 480;
    button.center = CGPointMake(xValue, yValue);
    counter = counter + 1;
    [self performSelector:@selector(fillLabel) withObject:nil afterDelay:.5];

}

-(void)fillLabel {
    score.text = [NSString stringWithFormat:@"Score: %i", counter];
}

另一种方法是,如果要使用布局约束,则更改布局约束的“常量”参数。在下面的例子中,我把我的按钮放在这样一个地方(在IB中),它对superview有一个左上限。我将IBOutlets制作成了那些约束并将它们连接起来。这是代码:

@implementation ViewController {
    IBOutlet UILabel *score;
    int counter;
    NSLayoutConstraint IBOutlet *leftCon;
    NSLayoutConstraint IBOutlet *topCon;
}

-(IBAction)random:(id)sender{
    int xValue = arc4random() % 300;
    int yValue = arc4random() % 440;
    leftCon.constant = xValue;
    topCon.constant = yValue;
    counter = counter + 1;
    score.text = [NSString stringWithFormat:@"Score: %i", counter];
}