【问题标题】:Hide a button if not interacted with in a certain amount of time如果在一定时间内未与之交互,则隐藏按钮
【发布时间】:2012-06-01 12:51:45
【问题描述】:

我希望在 android 上实现类似于 zoomControl 的行为,其中按钮出现,并且在与之交互时保持可见,但如果它们在一段时间内没有被交互,它们就会消失。

一般逻辑是这样的:

显示按钮:在我希望它显示的时间开始某种计时器/事件

如果发生与按钮的交互,则将计时器/事件重置为新的时间量

如果计时器/事件被触发,隐藏按钮。

我可以运行一些performSelectorafterDelay,以在每次交互时隐藏按钮的方法,并让performSelector调用的隐藏方法按钮检查一些计数/标志,这些计数/标志将随着每次交互而增加互动..这会起作用,但它似乎相当不雅:

显示按钮:递增计数:执行选择器 5 秒后隐藏

按钮操作:递增计数:5 秒后执行选择器隐藏

隐藏:如果 count !=0 什么也不做,则减少计数,否则隐藏按钮

有没有更好的方法?这对我来说只是感觉很笨拙。

【问题讨论】:

    标签: ios button timer


    【解决方案1】:

    使用NSTimer

    myButtonHideTimer = [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(hideButton:) userInfo:nil repeats:NO];
    

    那么如果你在计时器触发调用之前获得交互

    [myButtonHideTimer invalidate];//This stops the event from triggering
    

    然后重新创建定时器来重置触发时间

    【讨论】:

    • 感谢您的建议。此解决方案与 Ole 的解决方案之间是否有任何性能考虑?
    • 考虑到您使定时器失效和重新创建的频率,我怀疑这会对性能产生任何重大影响
    【解决方案2】:

    我会选择performSelector:withObject:afterDelay: 路线,因为您不必处理专用的计时器对象。不过,不知道你需要计数器做什么。

    1. 致电performSelector:withObject:afterDelay:
    2. 发生用户交互时,请致电cancelPreviousPerformRequestsWithTarget:selector:object:。然后再次拨打performSelector:withObject:afterDelay:

    【讨论】:

    • 感谢您的解决方案。老实说,我很难在两者之间做出决定,哪个是更好的答案。我怀疑在幕后,你和 Dan F 的执行方式非常相似,但我对 iOS 的内部运作还不够熟悉,无法做出公正的判断。
    • 其实幕后的动作会和performSelector:withObject:afterDelay:内部使用定时器非常相似。
    猜你喜欢
    • 2015-07-11
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多