【问题标题】:Best method to get text to blink in iPhone OS?让文字在 iPhone OS 中闪烁的最佳方法?
【发布时间】:2010-07-05 22:09:22
【问题描述】:

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

现在,我正在调用无数的 NSTimers 和选择器,它们等待、更改 alpha、等待,然后将其更改回来。即使这样,它看起来也很糟糕,我想我必须放一个 NSTimer 来逐渐改变 alpha,但据我所知,它们并不适合那种精确的东西。

我的想法是必须有一种方法可以比我目前实施的方法做得更好。感觉就像 hack。

【问题讨论】:

    标签: ios objective-c iphone methods nstimer


    【解决方案1】:

    使用动画代理可能会减少“hacky”:

    [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 构建,请查看文档,因为您应该使用基于块的动画调用,而不是这些基于委托的动画调用。

    【讨论】:

    • 这样好多了。谢谢!不过,有什么方法可以让动画更快?
    • 更新了关于持续时间和 iOS4 的答案。
    • 您可以更改持续时间; [UIView setAnimationDuration:0.1f];您可能需要考虑动画的配置文件 - 有关更多详细信息,请参阅文档,例如。 [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];
    • 谢谢。其实我现在觉得很傻。发表评论大约 2 分钟后,我意识到这一点。
    【解决方案2】:

    你可以像设置动画一样设置标签的alpha

    用动画隐藏标签

    [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】:

      我会使用 NSTimer,但不是弄乱 alpha 通道,我要么不绘制文本(如果 Apple 的非常受属性限制的 SDK 甚至可以这样做),或者如果这不可能,你总是可以在上面绘制一些东西它(像一个矩形)。

      使用这种在文本上绘制内容的方法会产生更好的性能。 虽然有些人(好吧,大多数人)会认为这是一个丑陋的 hack,但我只想说:“如果它看起来正确,那就是正确的。”

      【讨论】:

      • 另一种技巧是将文本的位置放置在远离屏幕的某个位置。这样您就不必在上面画任何东西,也不必担心弄清楚如何隐藏文本。注意:如果您可以切换控件的可见性,那就太好了。如果你弄清楚了,请告诉我! :)
      • 切换可见性?使用hidden 属性。
      【解决方案4】:

      NSTimers 和更改 alpha 是一种完全可以接受的方式 - 这当然是我所做的。如果您遇到问题,也许代码示例可以帮助我们找出问题所在?

      【讨论】:

      • 没有任何问题,只是看起来有点片状。我是一名图形艺术家,因此我不希望我的应用程序看起来像 App Store 上的许多其他应用程序。
      • 问题是,如果看不到你的代码,就很难弄清楚“片状”是从哪里来的。这很可能与使用 NSTimer 本身无关,您只是想在屏幕上闪烁一个文本框吗?什么样的速度?你还在主 UI 线程上做什么?视图层次结构中还有多少其他层等等,有很多可能的考虑因素。
      猜你喜欢
      • 2022-06-11
      • 1970-01-01
      • 2011-09-15
      • 2017-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多