昨天產(chǎn)品經(jīng)理告訴我,希望能實現(xiàn)仿網(wǎng)易嚴選那樣,可以捕捉到用戶的截屏操作,然后進行截屏分享的小功能。
在實現(xiàn)的過程中遇到的最大問題就是截屏為什么沒有狀態(tài)欄???然后各種查找,資料聊聊無幾,只有大神OpenFibers的OTScreenShotHelper里可以找到關(guān)于狀態(tài)欄截屏處理的方式。原諒我這個小白沒有看懂為什么大神可以通過runtime交換方法就獲得了狀態(tài)欄視圖。
附:https://github.com/OpenFibers/OTScreenshotHelper
OTScreenshotHelper中存在的問題是在截屏webView時,無法截屏到網(wǎng)頁內(nèi)容。需要修改的地方是:
+ (UIImage *)screenshotWithStatusBar:(BOOL)withStatusBar rect:(CGRect)rect orientation:(UIInterfaceOrientation)o{}
方法中在將window的層級視圖渲染到context時的方法略作修改:
[[window layer] renderInContext:context];
替換為
[window drawViewHierarchyInRect:window.bounds afterScreenUpdates:YES];
但是獲得了很好的思路,想要截屏帶狀態(tài)欄,那么我們找到狀態(tài)欄的視圖,將其渲染到context中不就可以了么。
關(guān)鍵在于如何獲取狀態(tài)欄視圖,最終在這里找到了答案:
http://blog.csdn.net/qxuewei/article/details/53763653
代碼
UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
對于iPhone來說,橫屏的時候是沒有狀態(tài)欄的,所以。。。
gitHub地址:https://github.com/HannahZheng/HHTakeScreenshot.git
監(jiān)聽截屏事件的通知:UIApplicationUserDidTakeScreenshotNotification
參考:
IOS截圖分享,狀態(tài)欄擋住了UIView處理
我只是想要截個屏:http://blog.startry.com/2016/02/23/Screenshots-With-SwViewCapture/
iOS 多種截屏功能代碼[UIKit and opengles]:http://www.chongchonggou.com/g_869665266.html