当导航到iPhone中的新视图时,NSTimer在iOS 7中无效

时间:2013-12-30 09:52:33

标签: ios sdk nstimer

我正面临与NSTimer相关的一些问题。我需要在5秒的时间范围内在底部显示UIButton。我实现了NSTimer功能,并在那个时间显示了按钮。但是,当我导航到新的View时。我需要停止NSTimer或无效。我已在- (void)viewDidDisappear:(BOOL)animated中完成了这项工作。但是NSTimer仍在执行中。它在任何时候都没有停止过。下面是我的代码。

- (void)viewWillAppear:(BOOL)animated {
   [super viewWillAppear:animated];

    self._sizeNowButton = [[UIButton alloc]initWithFrame:CGRectMake(0, self.view.frame.size.height+70, 320, 44)];
    [TLStylesheet useTurquoiseStyleForButton:self._sizeNowButton withText:NSLocalizedString(@"Size Now", nil) withFontSize:BUTTON_BOTTOM_FONT_SIZE];

    [self._sizeNowButton addTarget:self action:@selector(sizeNowClicked) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:self._sizeNowButton];

    SEL tSelector = NSSelectorFromString(@"aTimer");
    self._aTimer = [NSTimer scheduledTimerWithTimeInterval:10.0 target:self selector:tSelector userInfo:nil repeats:NO];
}


-(void)aTimer
{
    self._tTimer = [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(showButton) userInfo:nil repeats:YES];
}

-(void)showButton {

    if([self._sizeNowButton isHidden] )
    {
        self._sizeNowButton.hidden = NO;
        CGRect newFrame = CGRectMake(self._sizeNowButton .frame.origin.x , self._sizeNowButton .frame.origin.y - 44, self._sizeNowButton .frame.size.width, self._sizeNowButton .frame.size.height);
        [UIView animateWithDuration:0.5f
                              delay:0.0
                            options:UIViewAnimationOptionTransitionFlipFromBottom
                         animations:^{
                             [self._sizeNowButton  setFrame:newFrame];
                         }
                         completion:nil];
    }
    else
    {
        CGRect newFrame = CGRectMake(0, self.view.frame.size.height, 320, 44);
        [UIView animateWithDuration:0.5f
                              delay:0.0
                            options:UIViewAnimationOptionCurveLinear
                         animations:^{
                             [self._sizeNowButton  setFrame:newFrame];
                         }
                         completion:nil];

        self._sizeNowButton .hidden = YES;
    }
}

- (void)viewDidDisappear:(BOOL)animated {
   [super viewDidDisappear:animated];
    [self._tTimer invalidate];
    self._tTimer = nil;
    self._sizeNowButton = nil;
}

2 个答案:

答案 0 :(得分:2)

您正在实例化self._aTimer但无效self._tTimer

当您似乎触发两个不同的计时器(_aTimer_tTimer)时,您需要在viewWillDisappear:中禁用这两个计时器。

if (self._aTimer)
    [self._aTimer invalidate];
self._aTimer = nil;
if (self._tTimer)
    [self._tTimer invalidate];
self._tTimer = nil;

答案 1 :(得分:0)

试试这个:

像这样启动计时器

self. _tTimer = [NSTimer timerWithTimeInterval:5.0 target:self selector:@selector(showButton) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:self. _tTimer forMode:NSDefaultRunLoopMode];
[self. _tTimer fire];

并像这样停止 -

if (self. _tTimer)
{
    [self. _tTimer invalidate];
    self. _tTimer = nil;
}