1. 程式人生 > >IOS截圖分享,狀態列擋住了UIView處理

IOS截圖分享,狀態列擋住了UIView處理

至於截圖分享這個功能,我也不知是哪個APP始作俑者,這個13裝的犀利。。。。

原理簡單的說下:iOS 7.0之後加入了一個系統通知 

UIApplicationUserDidTakeScreenshotNotification 截圖觸發的通知

也就是 

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

-(void)userDidTakeScreenshot:(id)sender{
}

在這裡就不解釋了。。。 

我要說的重點是截圖分享是每個介面都有可能發生了,可能發生在任何介面

如果把截圖檢視放在 UIView 上那麼比較尷尬,看下摩拜單車的,我覺得大部分產品都是一直在模仿從未被超越。。。


想都不用想,肯定要去程式猿做的跟膜拜單車一樣。。。。。

那麼UIView就需要載入UIwindow上了 。。 

我們現在來獲取UIWindow

- (UIWindow *)mainWindow
{
    UIApplication *app = [UIApplication sharedApplication];
    if ([app.delegate respondsToSelector:@selector(window)])
    {
        return [app.delegate window];
    }
    else
    {
        return [app keyWindow];
    }
}

當UIWindow獲取之後,或許你在想大功告成了。。。
BUT

蛋疼的事情總是有的 。。。 當你在往UIWindow上加入View時


不用我說了,肯定不行的 。。。  至少要像下圖。。。


也就是狀態列上面的字是不要出現的。。   

其實 UIWindow 有個windowLevel 屬性

UIWindow *window = [self mainWindow];

windows.windowLevel = UIWindowLevelAlert;

UIWindowLevelAlert :UIView會遮住狀態列的字

UIWindowLevelNormal : 就是正常情況下的死樣子