如果没有触摸,UiView fadeOut

时间:2010-09-09 18:47:05

标签: objective-c ipad animation ios

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

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

换句话说,只有当没有人接触到它内部的按钮时,视图才会消失。

你能帮我解决这个问题。

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

1 个答案:

答案 0 :(得分: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:无需明确保留计时器。它被runloop保留直到它发射。回调后,无论如何都会被释放。只需确保始终将变量重置为nil,否则您的应用可能会因无效访问而崩溃。如果您需要删除它被触发的时间,请调用invalidate方法。