眨眼动画导致视图卡住

时间:2014-08-24 22:47:56

标签: ios objective-c cocoa-touch

我正在尝试创建一种在我的应用中闪烁某个图标的方法。 但是当我使用这段代码时:

-(void)blinkIcon : (UIButton *)theIcon
{
  for (int i = 0; i < 6 ; i++)
  {
    if (theIcon.hidden)
    {
        theIcon.hidden = NO;
    }
    else
    {
        theIcon.hidden = YES;
    }
    [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.3]];
  }
  theIcon.hidden = NO;
}

它的效果不是很好,因为图标会“卡住”几秒钟而且就是这样。 这个过程必须以:

结束
theIcon.hidden = NO; 

1 个答案:

答案 0 :(得分:1)

我刚刚编写了这个方法,通过 blink 按钮获取我认为的意思。

- (void)blinkButton:(UIButton *)button {
    CGFloat newAlpha = button.alpha == 1.0 ? 0.1 : 1.0;
    [UIView animateWithDuration:0.5 animations:^{
        button.alpha = newAlpha;
    } completion:^(BOOL finished) {
        [self blinkButton:button];
    }];
}

它产生以下结果:

https://www.dropbox.com/s/48vfpgn1cw6mj17/blink2.mov?dl=0

如果你不能在将来停止它,你可以做这样的事情 - 我设置了一个用于测试的条形按钮项,调用stopBlinking方法:

- (void)blinkButton:(UIButton *)button {
    // if we shouldn't be blinking and the button is currently not
    // totally faded in, fade it all the way in
    if (!_shouldBlink && button.alpha != 1.0) {
        [UIView animateWithDuration:0.5 animations:^{
            button.alpha = 1.0;
        }];
    }

    // otherwise we should continue blinking
    else {
        CGFloat newAlpha = button.alpha == 1.0 ? 0.1 : 1.0;
        [UIView animateWithDuration:0.5 animations:^{
            button.alpha = newAlpha;
        } completion:^(BOOL finished) {
            [self blinkButton:button];
        }];
    }
}

- (void)stopBlinking {
    _shouldBlink = NO;
}

这产生了这个:

https://www.dropbox.com/s/sbwol1ac710t6nw/stop.mov?dl=0