實現如上圖效果
1,監聽截圖產生事件
[[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(userDidTakeScreenshot:)name:UIApplicationUserDidTakeScreenshotNotification object:nil];
2,擷取截取到的圖片
//返回截取到的圖片- (UIImage *)imageWithScreenshot{ NSData *imageData = [self dataWithScreenshotInPNGFormat]; return [UIImage imageWithData:imageData];}//截取當前螢幕- (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);}
3,實現漂浮View的代碼
- (void)userDidTakeScreenshot:(NSNotification *)notification{ UIView *view = [[UIView alloc] init]; view.backgroundColor = H_GREENCOLOR; view.layer.cornerRadius = 4; view.clipsToBounds = YES; [self.window addSubview:view]; _screenImage = [self imageWithScreenshot]; //添加顯示 UIImageView *imgvPhoto = [[UIImageView alloc]initWithImage:_screenImage]; [view addSubview:imgvPhoto]; UILabel *lab = [[UILabel alloc] init]; lab.text = @"一鍵分享"; lab.textAlignment = NSTextAlignmentCenter; lab.font = H_FONT10; lab.textColor = [UIColor whiteColor]; [view addSubview:lab]; [view mas_makeConstraints:^(MASConstraintMaker *make) { make.right.equalTo(self.window.mas_right).mas_offset(-15);make.centerY.mas_equalTo(self.window.mas_centerY); make.width.mas_equalTo(ScreenWidth/5+4); make.height.mas_equalTo(ScreenHeight/5+20); }]; [imgvPhoto mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(view.mas_left).mas_offset(2); make.right.equalTo(view.mas_right).mas_offset(-2); make.top.mas_equalTo(view.mas_top).mas_offset(2); make.height.mas_equalTo(ScreenHeight/5); }]; [lab mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(view.mas_left).mas_offset(0); make.right.equalTo(view.mas_right).mas_offset(0); make.top.mas_equalTo(imgvPhoto.mas_bottom).mas_offset(0); make.bottom.mas_equalTo(view.mas_bottom).mas_offset(0); }]; UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapClick:)]; [view addGestureRecognizer:tap]; [self performSelector:@selector(delayMethod:) withObject:view/*可傳任意型別參數*/ afterDelay:3.0];}
4,3秒之後view消失
- (void)delayMethod:(UIView *)view{ [UIView animateWithDuration:2 animations:^{ } completion:^(BOOL finished) { [view removeFromSuperview]; }];}
5,tap點擊事件
- (void)tapClick:(UIGestureRecognizer *)tap{//實現相應功能}