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
{
//实现相应功能
}
展开阅读全文

没有更多推荐了,返回首页