产品经理今天提出一个新的需求,需要实现类似于每日优鲜、淘宝等客户端的截屏分享的功能,即home+power截屏后弹出分享页面,同时将截取到的图片放在当前页面中展示,如下效果:
之前没有做过这样的需求,但是实现过截屏相关的功能,故初步考虑获取系统截屏事件,然后在该事件中利用程序截屏并按一定比例显示在屏幕上,最后在该事件中调用友盟分享的方式实现了。
首先第一步是考虑如何获取系统截屏的事件,查找之后发现苹果在ios7之后提供了一个新的通知类型:UIApplicationUserDidTakeScreenshotNotification,这个通知会告知注册了此通知的对象已经发生了截屏事件,然后我们就可以在这个事件中实现自己的逻辑。
一、注册通知:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(screenShot) name:UIApplicationUserDidTakeScreenshotNotification object:nil];
二、实现接收到通知的方法
- (void)screenShot
{
//每次截屏之前,删除之间添加的存放图片的imageView,不然重复截屏会不断的截取到之前的页面
[self.photoIV removeFromSuperview];
self.photoIV = nil;
//截屏, 获取所截图片(imageWithScreenshot在后面实现)
UIImage *image = [self imageWithScreenshot];
//添加显示
UIImageView *photoIV = [[UIImageView alloc]initWithImage:image];
self.photoIV = photoIV;
photoIV.frame = CGRectMake(20, 50, [UIScreen mainScreen].bounds.size.width-40, [UIScreen mainScreen].bounds.size.height-100);
/*为imageView添加边框和阴影,以突出显示*/
//给imageView添加边框
CALayer * layer = [photoIV layer];
layer.borderColor = [[UIColor whiteColor] CGColor];
layer.borderWidth = 5