iOS添加静置一段时间后唤起全屏轮播功能

一、背景

在开发一款美容业iPad应用期间,对方提出了一个类似电脑屏保的功能,把iPad静置一段时间后,自动唤起一个全屏图片轮播。

二、功能实现方案

如果算静置呢,我想可以定义为用户不触摸屏幕一段时间,就算用户没有操作行为,那只要监听用户的触摸行为就可以了。

按触摸响应链模式,设备总是从window开始检测是否有效触摸,使用hitTest进行不断的向下传播,那我们只要重载window的hitTes方法,在里面添加一个时间检测行为就可以了。

三、具体代码

  • 首先创建一个自定义的window类,用来重载方法
#import 

NS_ASSUME_NONNULL_BEGIN

@interface MMYWindow : UIWindow

@end

NS_ASSUME_NONNULL_END
  • 重载hitTest方法,插入一个检测入口
-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
    [self updateOperationInterval];
    return [super hitTest:point withEvent:event];
}
  • 先取消掉弹出屏保的延时方法,重新添加一个延时5分钟执行的弹出屏保的调用。
- (void)updateOperationInterval
{
    [NSObject cancelPreviousPerformRequestsWithTarget:self];
    // 5分钟后进入屏保
    [self performSelector:@selector(enterScreenSaverMode) withObject:nil afterDelay:60*5];
}

  • 弹出屏保的方法里只是简单的发一个系统消息,让其它地方监听它就好了
- (void)enterScreenSaverMode
{
    [[NSNotificationCenter defaultCenter] postNotificationName:@"enterScreenSaverMode" object:nil];
}
  • 在appDelegate中使用这个自定义的window
    self.window = [[MMYWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
    self.window.backgroundColor = [UIColor whiteColor];
  • 并在适当的位置监听这个消息,弹出轮播
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showCycleSlide) name:@"enterScreenSaverMode" object:nil];

你可能感兴趣的:(iOS添加静置一段时间后唤起全屏轮播功能)