How do I have one timer countdown and the other randomly move an object?

大城市里の小女人 提交于 2019-12-20 06:25:13

问题


I have the right code to move an object randomly and also to make numbers count down but I am not able to have an object move while the timer counts down. One thing I found weird though was that when I took out the part about the TimeLeft label the objects moved randomly but obviously the numbers did not count down.

The main question is: how can I have a timer countdown and have the object move at the same time?

(my main goal is to make the object stop moving once the timer reaches zero)

I would appreciate it alot if someone could help with this problem?

-(void)Workauto{
secondsCount1 = 10;
autoperiods = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(autoperiod) userInfo:nil repeats:YES];
}

-(void)autoperiod{
secondsCount1 = secondsCount1 -1;
int minuts = secondsCount1/ 60;
int seconds = secondsCount1 - (minuts * 60);

NSString *timerOutput = [NSString stringWithFormat:@"%2d:%.2d", minuts , seconds];
Count.text = timerOutput;
if (secondsCount1 == 0){
    secondsCount1=0;
    [autoperiods invalidate];
    autoperiods=nil;

    Count.hidden=YES;
    AutoTimeLeftLabel.hidden=YES;
    TimeLeft.hidden=NO;
    TimeLeftlabel.hidden=NO;

    Ball.hidden=NO;
    Ball2.hidden=NO;
    BluBall.hidden=NO;
    BluBall2.hidden=NO;

    RedHigh1.hidden=YES;
    RedHigh2.hidden=YES;
    RedHigh3.hidden=YES;
    RedHigh4.hidden=YES;

    RedLow1.hidden=YES;
    RedLow2.hidden=YES;

    BlueHigh1.hidden=YES;
    BlueHigh2.hidden=YES;
    BlueHigh3.hidden=YES;
    BlueHigh4.hidden=YES;

    BlueLow1.hidden=YES;
    BlueLow2.hidden=YES;

    RedMid1.hidden=YES;
    RedMid2.hidden=YES;
    RedMid3.hidden=YES;
    RedMid4.hidden=YES;

    BlueMid1.hidden=YES;
    BlueMid2.hidden=YES;
    BlueMid3.hidden=YES;
    BlueMid4.hidden=YES;

    move = [NSTimer scheduledTimerWithTimeInterval:0.03 target:self selector:@selector(move) userInfo:nil repeats:YES];
    pos = CGPointMake(4.0, -4.0);
    move2 = [NSTimer scheduledTimerWithTimeInterval:0.04 target:self selector:@selector(move2) userInfo:nil repeats:YES];
    pos2 = CGPointMake(3.0, 4.0);
    Update = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(onTimer) userInfo:nil repeats:YES];
    DPad = [NSTimer scheduledTimerWithTimeInterval:0.001 target:self selector:@selector(DPad) userInfo:nil repeats:YES];

    //RedGoals = [NSTimer scheduledTimerWithTimeInterval:0.001 target:self selector:@selector(RedGoals) userInfo:nil repeats:YES];
    //BlueGoals = [NSTimer scheduledTimerWithTimeInterval:0.001 target:self selector:@selector(BlueGoals) userInfo:nil repeats:YES];
    [self SetTimer];
}
}

-(void)SetTimer{
comeonandcount = 150;
GameTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(GameTimerCo) userInfo:nil repeats:YES];
}

-(void)GameTimerCo{
comeonandcount = comeonandcount - 1;
int minuts = comeonandcount / 60;
int seconds = comeonandcount - (minuts * 60);

NSString *timerOutputGame = [NSString stringWithFormat:@"%2d:%.2d", minuts , seconds];
TimeLeft.text = timerOutputGame;

if (comeonandcount == 0){
    comeonandcount=0;
    [GameTimer invalidate];
    GameTimer=nil;

    [move invalidate];
    [move2 invalidate];
}
}

回答1:


One thing I found weird though was that when I took out the part about the TimeLeft label the objects moved randomly but obviously the numbers did not count down.

Very well done! You've actually solved the problem already. That part is not "weird"; it's the cause of the problem.

You are using autolayout. Well, when you set the text of a label, that causes layout to happen. Thus, the constraints throughout your interface assert themselves and put all your objects back where they were. It's as simple as that.



来源:https://stackoverflow.com/questions/27085630/how-do-i-have-one-timer-countdown-and-the-other-randomly-move-an-object

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!