美文网首页工作生活
iOS添加静置一段时间后唤起全屏轮播功能

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

作者: ldhonline | 来源:发表于2019-07-03 23:44 被阅读0次

    一、背景

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

    二、功能实现方案

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

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

    三、具体代码

    • 首先创建一个自定义的window类,用来重载方法
    #import <UIKit/UIKit.h>
    
    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添加静置一段时间后唤起全屏轮播功能

        本文链接:https://www.haomeiwen.com/subject/oaghhctx.html