如何以编程方式突出显示UIButton?

时间:2008-12-09 06:05:26

标签: cocoa-touch

我有很多用户抱怨iPhone上的小“i”信息按钮难以触摸。好吧,很简单 - 我只是在它背后贴了一个大胖子隐形按钮,即使用最粗糙的手指触摸也不会错过,当你触摸它时,它会执行infoButtonAction。

事情是,我想将信息按钮本身闪烁约0.25秒,只是为了给出一个视觉“这是正在发生的事情”类型的反馈。我的意思是,我已经假设您打算点击“我”按钮,所以我只是将它视为 DID 点击它。

我试过这个,但它不起作用:

    UIImage* normalImage = [_infoButton imageForState:UIControlStateNormal];
    UIImage* highlighted = [_infoButton imageForState:UIControlStateHighlighted];
    _infoButton.highlighted = YES;                                          // flash the button
    [_infoButton setImage:highlighted forState:UIControlStateNormal];
    [_infoButton setNeedsDisplay];                                          //* FIXME: No flash?!

    [(AppDelegate*)[[UIApplication sharedApplication] delegate] infoTap];   // do the info action

    _infoButton.highlighted = NO;   
    [_infoButton setImage:normalImage forState:UIControlStateNormal];
    [_infoButton setNeedsDisplay];

关于如何获得我想要的行为的任何想法?

(我也对有关用户反馈的其他想法持开放态度,但仍然很好奇我将如何做到这一点。想象一下,相反,我有一个“游戏”/恶作剧,你按下“确定”按钮并“取消“闪烁,反之亦然,或同样愚蠢的东西。”

3 个答案:

答案 0 :(得分:4)

“i”按钮的大小应为44x44(Apple标准手指大小),可以在Interface Builder中完成。

对于某些动画,我建议调查核心动画。

答案 1 :(得分:1)

问题在于您将按钮标记为需要显示(调用-setNeedsDisplay是不必要的;按钮在内部调用),但从不允许运行循环有机会显示新图像。

在Cocoa中,您可以使用-performClick:之类的内容,但iPhone上无法使用。

相反,我建议您尝试在两者之间延迟调用-setSelected:-setHighlighted:

答案 2 :(得分:0)

我不确切知道您infotap方法中发生了什么,但似乎没有任何内容会导致您的第一次setImage:通话和第二次通话之间发生太大延迟。我的猜测是事情发生的速度比眼睛看得快。我建议看NSTimer试图在那里设置一个特定的延迟。