【问题标题】:UiView fadeOut if not touched如果未触摸,则 UiView 淡出
【发布时间】:2011-04-10 10:13:24
【问题描述】:

我想在我的 iPad 应用程序中重现此行为。 我有一个包含四个自定义按钮的子视图。

  • 视图的 alpha 值为 0.0
  • 我在上面描述的视图之外还有另一个始终可见的自定义按钮。
  • 当用户触摸可见按钮时,视图会显示其 alpha 到 1.0 的动画,显示其他 4 个按钮。
  • 现在我想启动一个计时器,在 2 秒后触发视图 fadeOut
  • 何时以及如果用户与按钮交互(例如 touchDown 或其他),则需要重置计时器。

换句话说,只有当没有人触摸其中的按钮时,视图才会消失。

你能帮我解决这个问题吗?

我已经设法学习了 UIView 动画的基础知识,但我不知道如何将它们排队。 我的 iPad 有 iOS 3.2.2。安装。 抱歉解释不好,但这是我的第一个 iPad 应用程序和我的第一个 obj-c 项目。

【问题讨论】:

    标签: objective-c ipad animation ios


    【解决方案1】:

    您会为此保留一个 NSTimer 实例变量。一旦您的视图完全可见,您可以通过例如实现动画代理的淡入淡出,你可以像这样初始化它:

    _fadeTimer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(fade:) userInfo:nil repeats:NO];
    

    确保 _fadeTimer 是一个实例变量,您需要能够重置它。然后实现淡出方法:

    - (void)fade:(NSTimer *)aTimer {
        // Forget about timer!
        _fadeTimer = nil;
    
        [UIView beginAnimations:nil context:NULL];
        // fade here
        [UIView commitAnimations];
    }
    

    在每次用户交互时,您只需调用一个延迟淡入淡出的方法。为此,请删除并重新创建计时器。或者更改它的开火日期:

    - (void)delayFade {
        [_fadeTimer setFireDate: [NSDate dateWithTimeIntervalSinceNow: 2.0]];
    }
    

    PS:不需要显式保留定时器。它由运行循环保留,直到它触发。回调之后,无论如何都会被释放。只要确保您始终将变量重置为nil,否则您的应用可能会因无效访问而崩溃。如果需要删除触发前的时间,请调用invalidate 方法。

    【讨论】:

    • 非常感谢简单但有效的解决方案!有效!我想知道当块语法到达 iPad 时它会如何变化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-29
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多