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

來源:互聯網
上載者:User

實現如上圖效果

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{//實現相應功能}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.