UIWindow的妙用(二) 制作App的屏幕保护功能

在IOS的开发中,有的时候出于美观的需要会要求App制作一个屏幕保护的功能,主要就是在App运行时如果经过一段时间没有触摸屏幕,App就会播放屏幕保护的内容,当触摸屏幕的时候,屏幕保护消失,程序继续运行,

首先实现检测到受否有触摸屏幕,那么就要用到UIWindow的实例方法

- (void)sendEvent:(UIEvent *)event 来检测是否触摸屏幕 


定义一个UIWindow的子类    



#import <UIKit/UIKit.h>


@class MainViewController,ScreenProtectViewController;

@interface ApplicationWindow : UIWindow



@property (nonatomic,strong) NSTimer *idleTimer;


@property (nonatomic,strong) MainViewController *mainVC;

@property (nonatomic,strong) UINavigationController *naVC;

@property (nonatomic,strong) ScreenProtectViewController *screenProtectVC;

@end




#import "ApplicationWindow.h"

#import "MainViewController.h"

#import "ScreenProtectViewController.h"

@implementation ApplicationWindow


@synthesize idleTimer,mainVC,screenProtectVC,naVC;

- (id)initWithFrame:(CGRect)frame

{

    self = [super initWithFrame:frame];

    if (self) {

        // Initialization code

       mainVC = [MainViewController shareInstance];

        naVC = [[UINavigationController alloc] initWithRootViewController:mainVC];

        


    }

    return self;

}


- (void)sendEvent:(UIEvent *)event { //检测屏幕上受否有触摸操作

    

    [super sendEvent:event];

    

    // 只在开始或结束触摸时 reset 闲置时间, 以减少不必须要的时钟 reset 动作

    

    NSSet *allTouches = [event allTouches];

    

    if ([allTouches count] > 0) {

        

        // allTouchescount 似乎只会是 1, 因此 anyObject 总是可用的

        

        UITouchPhase phase =((UITouch *)[allTouches anyObject]).phase;

        

        if (phase ==UITouchPhaseBegan || phase == UITouchPhaseEnded)

            

            [self resetIdleTimer];

        

    }

    

}


- (void)resetIdleTimer {

    

    if (idleTimer) {

        

        [idleTimer invalidate];

        

   NSLog(@"NoProtect");

        

        

        self.rootViewController =naVC;  //进入到程序正仓运行的模式

        

    }

    

    idleTimer = [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(idleTimerExceeded) userInfo:nil repeats:NO];

//这里可以设置屏幕保护出现的时间间隔

    

}


- (void)idleTimerExceeded {

    

    NSLog(@"screenProtect");

    

    screenProtectVC = [ScreenProtectViewController shareInstance];

    

    self.rootViewController =screenProtectVC;  //进入到屏幕保护模式

    

}




@end


实现这个功能主要是运用了UIwiondw的层级关系,还有就是UIwidow检测屏幕触摸的操作的方法,别的不多说了,直接上代码吧

demo下载地址



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。