使用UIWindow实现iOS应用屏保功能

屏保功能这个需求是为了演示用的,本来是想找App Store直营店那些测试机 长时间不动,就会自动播放一个动态图,然后点击就消失的功能。但是找了许久,也没找到类似的,哪怕一点点。。。 忧郁
随,还是自己做吧。求人不如求自己

首先 这个功能是为了能随时弹出来,所以肯定是要present一个VC。其次就是触发方式,在任何界面,长时间不动就会弹出来,所以要有个定时间。(定时器的就是我之前的blog GCD代替NSTimer),最后就是播放视频了,用原生自带的点击事件不好处理,只能用第三方的,找了个比较好的ZFPlayer 可以自定义view控制层。这个下次在说如何自定义。

好了 这次的重点就是如何做一个能在任何界面都能响应点击事件,并且重新倒计时的界面
这个就是UIWindow!
但是要能随时响应,就必须重写一个MainWindow 继承 原来的UIWindow 并重写一个方法

-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event; 

这个就是点击的响应事件触发的方法。
然后在创建一个新view

@property (nonatomic, strong) UIWindow *videoView; 

这些都写在.h文件里

接着开始实现这个功能

首先现实hitTest 这个方法

-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{ //.m
    UIView* result = [super hitTest:point withEvent:event];
     if (event ) { //判断是否有点击事件
        [self showAlert]; // 执行事件
    }
    return result;
}

然后

-(void)showAlert{
    if (self.videoView == nil) {
        self.videoView =  [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self           action:@selector(clickWindow)];
        [self.videoView addGestureRecognizer:tap]; // 创建点击事件 销毁新window       
        MovieViewController *vc = [[MovieViewController alloc]init];// 创建一个新的控制器
        self.videoView.rootViewController = vc;// 将新控制器的rootvc设置为新window
    }
    // 设置 window 的 windowLevel
    self.videoView.windowLevel = UIWindowLevelStatusBar; //TODO: Normal,StatusBar,Alert 分别 为 0,1000,2000 可以修改这里体验 层级变化 对 展示 window的影响
    self.videoView.hidden = NO;
    [self.videoView  makeKeyAndVisible]; //成为keyWindow

}

注意 这里就是创建一个新window 代替原来的window 然后创建一个新的控制器,将新控制器的rootvc设置为新window,修改新window的层级,使它现实出来。
最后就是销毁这个window

// 销毁新window
- (void)clickWindow
{
    //window 销毁
    self.videoView.hidden = YES; //可有可无 看 UI效果
    self.videoView = nil; // 这个方法是真正移除 UIWindow

}

这样就完成了类似屏保的功能。

ps:如果有更好的方法请私信我,毕竟我觉得这个方法还是有点麻烦的。

so finish。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值