具有超过 1 个步骤的突出显示状态的 UIButton

Posted

技术标签:

【中文标题】具有超过 1 个步骤的突出显示状态的 UIButton【英文标题】:UIButton with highlighted state which has more than 1 step 【发布时间】:2014-02-06 12:18:50 【问题描述】:

以下用例:

屏幕底部显示了一个 uibutton,它启用了应用程序的主要用例。如果用户第一次在应用程序中登录,我想通过将此按钮设置为突出显示状态来显示一个漂亮的动画 - 但是 - 我希望动画至少有 4 个状态(按钮周围有不同颜色的环) - 在高亮动画期间,我想在快速动画中为每个状态添加 1 个环)

有人知道怎么做吗?

(我不想为此使用单独的 imageView)

更新:

感谢您的帮助 - 我找到了一个可行的解决方案。

我继承了 UIButton 并覆盖了 setHighlighted:(BOOL)highlighted 方法。在该方法中,我检查是否要使用自定义突出显示。

高亮本身是由 ..

[UIView transitionWithView:self.imageView duration:0.1f options:UIViewAnimationOptionTransitionCrossDissolve animations:^ self.imageView.image = [UIImage imageNamed:@"xyz.png"]; completion:^(BOOL finished) if(finished)..

重要提示:adjustsImageWhenHighlighted = NO

非常适合我。

【问题讨论】:

使用单独的 UIImageView。 :- ) 你为什么不想这样做? 对于 UIImageView,我还没有找到完美的解决方案,它看起来确实很棒 - 但总的来说 - 我更愿意为此使用 UIButton 子类.. 我猜是更清洁的解决方案 你有一个干净的解决方案来用 imageView 做到这一点吗? 【参考方案1】:

创建一个名为 timerValue 的整数 (NSInteger) 属性,并将其初始化为 viewDidLoad 中的 0

还可以在您想要开始动画的任何位置创建一个NSTimer,并安排它每 200 毫秒或您希望动画帧之间的任何时间延迟调用一个选择器:

 NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.2f
                                                   target:self
                                                 selector:@selector(handleTimer)
                                                 userInfo:nil
                                                  repeats:YES];

然后每次调用handleTimer 时根据timerValue 更改按钮的图像:

-(void)handleTimer

    switch ( self.timerValue )
    
         case 0 :
            //load your frame 0 image on button
         break;
         case 1 :
            //load your frame 1 image on button
         break;
         case 2 :
            //load your frame 2 image on button
         .
         .
         .
         //etc
    
    self.timerValue = self.timerValue+1;

【讨论】:

您也可以添加最后一个案例并使用[self.timer invalidate] 来停止计时器。

以上是关于具有超过 1 个步骤的突出显示状态的 UIButton的主要内容,如果未能解决你的问题,请参考以下文章

Unity UI Button 具有疯狂的过渡状态行为 - 单击后仍保持突出显示

突出显示 OBIEE 或 SQL 中父值的子值差异

UISlider 突出显示状态,拇指宽度与正常不同

如何在Android中突出显示自定义菜单项onFocus状态

如何以角度突出显示文本区域中的文本?

当英雄图像进入视口时如何突出显示缩略图