使用计时器

时间:2015-12-05 18:26:03

标签: ios objective-c timer uibutton

我在Objective C中创建了一个简单的应用程序,每次单击按钮时,按钮都会更改屏幕上的位置。第一次单击该按钮时,计时器开始计时。

问题是计时器每秒关闭,按钮返回其原始位置。如何使定时器不影响按钮移动?

以下是我的ViewController.m文件中的代码:

注意:我根本无法解决这个问题。我可能需要有人真正拼出来告诉我该怎么做。谢谢!

注意:我的UIButton是“blackDot”

-(IBAction) mainClickButton{


int xmin = ([blackDot frame].size.width)/2;
int ymin = ([blackDot frame].size.height)/2;

int x = xmin + arc4random_uniform(self.view.frame.size.width - blackDot.frame.size.width);
int y = ymin + arc4random_uniform(self.view.frame.size.height - blackDot.frame.size.height);

[blackDot setCenter:CGPointMake(x, y)];


if (timerBeginInt < 1) {

    [timerLabel setText:@"Time : 0:10"];
    [self.view addSubview:timerLabel];
    currMinute=0;
    currSeconds=10;
    [self start];

}

timerBeginInt = timerBeginInt + 1;


}





-(void)start
{
    timer=[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerFired) userInfo:nil repeats:YES];

}
-(void)timerFired
{
    if((currMinute>0 || currSeconds>=0) && currMinute>=0)
    {
        if(currSeconds==0)
        {
            currMinute-=1;
            currSeconds=59;
        }
        else if(currSeconds>0)
        {
            currSeconds-=1;
        }
        if(currMinute>-1)
            [timerLabel setText:[NSString stringWithFormat:@"%@%d%@%02d",@"Time : ",currMinute,@":",currSeconds]];
    }
    else
    {
        [timer invalidate];
        timerBeginInt = 0;
    }
}

任何帮助表示赞赏!谢谢!

2 个答案:

答案 0 :(得分:1)

LodgeApps。

我复制你的代码,用我自己的Xcode运行它,我发现你的问题让你困惑。

简短的解决方案就在这里:

打开你的故事板或xib文件,关闭它。 enter image description here

如果你想保持Autolayout,

[self.view removeConstraints:blackDot.constraints];

NSLayoutConstraint* leftConstraint = [NSLayoutConstraint constraintWithItem:blackDot attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1.0f constant:x];

NSLayoutConstraint* topConstraint = [NSLayoutConstraint constraintWithItem:blackDot attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0f constant:y];

leftConstraint.active = YES;
topConstraint.active = YES;

替换setCenter

更深层次的原因:

如果启用了autolayout属性,则无法更改IBOutlet的框架,每次修改框架或中心的尝试都是非法的。您只能更改约束以移动IBOutlet。

让我困惑的是:

根据代码,单击按钮,按钮将立即移动。但它不会。因为setCentersetFrame之类的方法在Autolayout中不起作用。 Autolayout需要限制才能将UI(IBOutlets)放在正确的位置。如果你保持Autolayout,然后你不对IB做出限制,任何事情都可能发生,我无法解释。

答案 1 :(得分:0)

替换此.central_text{ background:url(../img/circle/new11.png) center center no-repeat; }  用这个

[blackDot setCenter:CGPointMake(x, y)];

同时放置断点并记录[blackDot setFrame:CGRectMake(x,y,blackDot.frame.size.width,blackDot.frame.size.height)]; 的值以确认新位置与旧位置不同。 我希望这会帮助你。