iOS監(jiān)測用戶截屏行為&自定義處理截屏圖片(案例:飛豬app)

項目中需求監(jiān)測用戶截屏行為 并生成圖片誘導(dǎo)用戶分享。像飛豬此類APP已經(jīng)實(shí)現(xiàn)分享功能
產(chǎn)品需求是改變用戶系統(tǒng)截圖的本身上的圖片元素打肝,使其截屏?xí)r保存到相冊的那張圖片是我們想讓他保存的模樣赤兴。
后來查資料發(fā)現(xiàn)iOS只提供了

UIApplicationUserDidTakeScreenshotNotification 這個Notification的API Key 來檢測用戶截屏行為 問題是Did表明是在截屏之后才告訴你已經(jīng)截屏了這個狀態(tài) 暫時未提供will的方法

示例截圖.PNG

So 只能像飛豬一樣監(jiān)測到截屏之后自己處理一張截圖 提供給用戶是否選擇分享

注冊通知

 [[NSNotificationCenter defaultCenter]addObserver:self
                                            selector:@selector(userDidTakeScreenshot:)  name:UIApplicationUserDidTakeScreenshotNotification
                                              object:nil];

實(shí)現(xiàn)監(jiān)測方法&生成UI

- (void)userDidTakeScreenshot:(NSNotification *)notification
{
    //模擬用戶截屏行為, 獲取所截圖片(并非系統(tǒng)的截圖 系統(tǒng)截圖還是會保存到相冊 這里可以處理我們自己的截圖選擇去保存或者分享)
    UIImage *image = [self imageWithScreenshot];

    UIToolbar *baseView = [[UIToolbar alloc]initWithFrame:self.view.bounds];
    baseView.barStyle = UIBarStyleBlack;
    [self.view.window addSubview:baseView];
    //添加顯示
    UIImageView *imgvPhoto = [[UIImageView alloc]initWithImage:image];
    imgvPhoto.frame = CGRectMake(0, 0, self.view.frame.size.width/1.5, self.view.frame.size.height/1.5);
    imgvPhoto.center = baseView.center;
    //添加邊框
    imgvPhoto.layer.borderColor = [[UIColor xingzheBlue] CGColor];
    imgvPhoto.layer.borderWidth = 5.0f;
   
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    button.frame = CGRectMake(0, imgvPhoto.y + imgvPhoto.height + 20, SCREENWIDTH, 40);
    [button setTitle:@"分享至好友" forState:UIControlStateNormal];
    [button setTitleColor:[UIColor xingzheBlue] forState:UIControlStateNormal];
    [button addTarget:self action:@selector(shareConfig) forControlEvents:UIControlEventTouchUpInside];
    [baseView addSubview:button];
    [baseView addSubview:imgvPhoto];
}

分享

- (void)shareConfig
{
    //分享代碼
}

截取當(dāng)前屏幕window上的元素生成Image

//截取當(dāng)前屏幕
- (NSData *)dataWithScreenshotInPNGFormat
{
    CGSize imageSize = CGSizeZero;
    UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
    if (UIInterfaceOrientationIsPortrait(orientation))
        imageSize = [UIScreen mainScreen].bounds.size;
    else
        imageSize = CGSizeMake([UIScreen mainScreen].bounds.size.height, [UIScreen mainScreen].bounds.size.width);
    UIGraphicsBeginImageContextWithOptions(imageSize, NO, 0);
    CGContextRef context = UIGraphicsGetCurrentContext();
    for (UIWindow *window in [[UIApplication sharedApplication] windows])
    {
        CGContextSaveGState(context);
        CGContextTranslateCTM(context, window.center.x, window.center.y);
        CGContextConcatCTM(context, window.transform);
        CGContextTranslateCTM(context, -window.bounds.size.width * window.layer.anchorPoint.x, -window.bounds.size.height * window.layer.anchorPoint.y);
        if (orientation == UIInterfaceOrientationLandscapeLeft)
        {
            CGContextRotateCTM(context, M_PI_2);
            CGContextTranslateCTM(context, 0, -imageSize.width);
        }
        else if (orientation == UIInterfaceOrientationLandscapeRight)
        {
            CGContextRotateCTM(context, -M_PI_2);
            CGContextTranslateCTM(context, -imageSize.height, 0);
        } else if (orientation == UIInterfaceOrientationPortraitUpsideDown) {
            CGContextRotateCTM(context, M_PI);
            CGContextTranslateCTM(context, -imageSize.width, -imageSize.height);
        }
        if ([window respondsToSelector:@selector(drawViewHierarchyInRect:afterScreenUpdates:)])
        {
            [window drawViewHierarchyInRect:window.bounds afterScreenUpdates:YES];
        }
        else
        {
            [window.layer renderInContext:context];
        }
        CGContextRestoreGState(context);
    }
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return UIImagePNGRepresentation(image);
}

//返回截取到的圖片
- (UIImage *)imageWithScreenshot
{
    NSData *imageData = [self dataWithScreenshotInPNGFormat];
    return [UIImage imageWithData:imageData];
}

如果有其他更好地方法來檢測用戶將要截屏的行為方式歡迎交流分享....

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市芭析,隨后出現(xiàn)的幾起案子凛捏,更是在濱河造成了極大的恐慌,老刑警劉巖烦磁,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贡羔,死亡現(xiàn)場離奇詭異,居然都是意外死亡个初,警方通過查閱死者的電腦和手機(jī)乖寒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來院溺,“玉大人楣嘁,你說我怎么就攤上這事≌湟荩” “怎么了逐虚?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長谆膳。 經(jīng)常有香客問我叭爱,道長,這世上最難降的妖魔是什么漱病? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任买雾,我火速辦了婚禮,結(jié)果婚禮上杨帽,老公的妹妹穿的比我還像新娘漓穿。我一直安慰自己,他們只是感情好注盈,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布晃危。 她就那樣靜靜地躺著,像睡著了一般老客。 火紅的嫁衣襯著肌膚如雪僚饭。 梳的紋絲不亂的頭發(fā)上震叮,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天,我揣著相機(jī)與錄音鳍鸵,去河邊找鬼苇瓣。 笑死,一個胖子當(dāng)著我的面吹牛权纤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播乌妒,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼汹想,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了撤蚊?” 一聲冷哼從身側(cè)響起古掏,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎侦啸,沒想到半個月后槽唾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡光涂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年庞萍,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片忘闻。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡钝计,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出齐佳,到底是詐尸還是另有隱情私恬,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布炼吴,位于F島的核電站本鸣,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏硅蹦。R本人自食惡果不足惜荣德,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望童芹。 院中可真熱鬧命爬,春花似錦、人聲如沸辐脖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嗜价。三九已至艇抠,卻和暖如春幕庐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背家淤。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工异剥, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人絮重。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓冤寿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親青伤。 傳聞我的和親對象是個殘疾皇子督怜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,501評論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件狠角、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,022評論 4 62
  • 因病住院時丰歌,跟愛讀書的浩子說讓他給我推薦一些能讓人從中獲得溫暖和力量的書籍姨蟋。不僅僅是因?yàn)椴∏樘厥鈱?dǎo)致的身心痛苦,還...
    玉妃說閱讀 523評論 0 1
  • 不知道為什么到了這個年紀(jì)立帖,所有人都把感情掛在嘴邊眼溶,仿佛愛情就是像超市上的貨品,你想要就可以得到晓勇,但是感情不應(yīng)...
    side033閱讀 317評論 0 0
  • 剃度 爛漫的青年信起了佛偷仿,他虔誠地牽著眾生,他信奉萬物有靈宵蕉。他學(xué)習(xí)懺悔酝静,感恩,回向羡玛,他維持善良的國度别智,他推崇良知和...
    南溪向南北歌流海閱讀 291評論 0 0