昨天产品经理告诉我,希望能实现仿网易严选那样,可以捕捉到用户的截屏操作,然后进行截屏分享的小功能。
在实现的过程中遇到的最大问题就是截屏为什么没有状态栏???然后各种查找,资料聊聊无几,只有大神OpenFibers的OTScreenShotHelper里可以找到关于状态栏截屏处理的方式。原谅我这个小白没有看懂为什么大神可以通过runtime交换方法就获得了状态栏视图。
附:https://github.com/OpenFibers/OTScreenshotHelper
OTScreenshotHelper中存在的问题是在截屏webView时,无法截屏到网页内容。需要修改的地方是:
+ (UIImage *)screenshotWithStatusBar:(BOOL)withStatusBar rect:(CGRect)rect orientation:(UIInterfaceOrientation)o{}
方法中在将window的层级视图渲染到context时的方法略作修改:
[[window layer] renderInContext:context];
替换为
[window drawViewHierarchyInRect:window.bounds afterScreenUpdates:YES];
但是获得了很好的思路,想要截屏带状态栏,那么我们找到状态栏的视图,将其渲染到context中不就可以了么。
关键在于如何获取状态栏视图,最终在这里找到了答案:
http://blog.csdn.net/qxuewei/article/details/53763653
代码
UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
对于iPhone来说,横屏的时候是没有状态栏的,所以。。。
gitHub地址:https://github.com/HannahZheng/HHTakeScreenshot.git
监听截屏事件的通知:UIApplicationUserDidTakeScreenshotNotification
参考:
IOS截图分享,状态栏挡住了UIView处理
我只是想要截个屏:http://blog.startry.com/2016/02/23/Screenshots-With-SwViewCapture/
iOS 多种截屏功能代码[UIKit and opengles]:http://www.chongchonggou.com/g_869665266.html