代码之家  ›  专栏  ›  技术社区  ›  SeniorShizzle

在iPhone操作系统中让文本闪烁的最佳方法?

  •  4
  • SeniorShizzle  · 技术社区  · 14 年前

    我想让我的文本框闪烁(就像旧的液晶钟一样)。

    现在,我给无数的计时器和选择器打电话,它们等待,改变alpha,等待,然后再改变它。即使有了这个,它看起来也很糟糕,我想我必须用一个时间来逐渐改变α,但是从我所听到的来看,它们并不意味着要达到这个精度。

    我的想法是,一定有一种方法可以比我目前正在实施的方法更好地做到这一点。感觉像黑客。

    4 回复  |  直到 8 年前
        1
  •  7
  •   Taylan Pince    14 年前

    使用动画代理可能会减少“黑客行为”:

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
    [myLabel setAlpha:0.0];
    [UIView commitAnimations];
    

    然后您可以让DidstopSelector重新启动动画:

    - (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
        [self displayLabel];
    }
    

    根据AnimationID,您可以采取不同的操作等。使用uiview的setAnimationDelay也可能很方便。

    uiview还具有对动画的setDuration调用:

    [UIView setAnimationDuration:0.1];
    

    如果您正在构建IOS4,请检查文档,因为您应该使用基于块的动画调用,而不是这些基于委托的调用。

        2
  •  5
  •   D-eptdeveloper    11 年前

    你可以用湮灭来设置标签的字母,就像

    隐藏带动画的标签

    [UIView animateWithDuration:0.2 delay:0.1 options:UIViewAnimationOptionCurveEaseOut animations:^{
            lblDistance.alpha=0;
        } completion:^(BOOL finished) {
            if (finished) {
    
            }
        }];
    

    显示带动画的标签

    [UIView animateWithDuration:0.2 delay:0.1 options:UIViewAnimationOptionCurveEaseOut animations:^{
            lblDistance.alpha=1;
        } completion:^(BOOL finished) {
            if (finished) {
    
            }
        }];
    

    这是最好的方法,任何人都可以动画和创建一个闪烁的标签……

        3
  •  1
  •   AlvinfromDiaspar    14 年前

    我会使用nstimer,但是我不会干扰alpha通道,也不会绘制文本(如果这在苹果的属性有限的SDK中是可能的),或者如果这不可能的话,你可以一直在上面绘制一些东西(如矩形)。

    使用这种在文本上绘制内容的方法将产生更好的性能。 虽然有些人(大多数人都认为这是一个丑陋的黑客,让我说,“如果它看起来正确,它是正确的。”

        4
  •  0
  •   Roger    14 年前

    时间和改变阿尔法是一个完全可以接受的方法-这当然是我所做的。如果您有问题,也许代码示例可以帮助我们了解问题所在?