具有超过 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 具有疯狂的过渡状态行为 - 单击后仍保持突出显示