1. 程式人生 > >iOS截圖後仿今日頭條實現一鍵分享

iOS截圖後仿今日頭條實現一鍵分享

這裡寫圖片描述

實現如上圖效果

1,監聽截圖產生事件

    [[NSNotificationCenter defaultCenter] addObserver:self
selector:@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
{
//實現相應功能
}