获取UIImageView和UILabel的屏幕截图,然后分享它

时间:2015-08-03 09:04:27

标签: ios objective-c uitableview uiimageview uiimage

我认为我已接近解决问题。我有一个原型单元UItableView,如下所示: Cell
您看到的灰度背景图片来自服务器,文字是叠加文字,上面是UILabel,会更改在每个也在服务器中的图像上。所以它就像我要发送的两层。第三个红色按钮是共享按钮,并说我选择在电子邮件中共享此图像,此功能将被调用:

-(UIImage *)makeImageofCell:(NSUInteger)sender
{
    HomeCell *cellObj;
    cellObj.tag = sender;
    UIGraphicsBeginImageContext(cellObj.homeImg.frame.size );
    [cellObj.homeImg.layer renderInContext:UIGraphicsGetCurrentContext()];
    [cellObj.overlayText.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return viewImage;
}

-(void)shareButtonClicked:(UIButton*)sender我写了共享代码。现在在这个函数中我想发送该图像。以下是我正在做的事情:
UIImage *imageToShare = [self makeImageofCell:sender.tag];正在调用makeImageofCell函数并将其值分配给UIImage。所以我写这个是为了分享这个网址。

NSString *imageToShare = [NSString stringWithFormat:@"Hey! Check out this Image %@",imageToShare];


但我所得到的只是Image is: (null)。知道如何实现这一目标吗?

1 个答案:

答案 0 :(得分:1)

请按照UIWindow屏幕截图的代码进行操作。您只需替换自定义视图或单元格。

- (UIImage*)takeScreenshot
{
    // get the key-window references
    UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];

    // manipulate boundries of key-window
    CGRect rect = [keyWindow bounds];

    // create context using size
    UIGraphicsBeginImageContextWithOptions(rect.size,YES,0.0f);

    // get the context reference
    CGContextRef context = UIGraphicsGetCurrentContext();

    // render in context
    [keyWindow.layer renderInContext:context];

    // get the rendered image
    UIImage *capturedScreen = UIGraphicsGetImageFromCurrentImageContext();

    // complete context
    UIGraphicsEndImageContext();

    // return image
    return takeScreenshot;
}

<强>被修改

     - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
         UIButton *btnShareImage = (UIButton*)[cell1 viewWithTag:KTAGABSENTBUTTON];
         [btnShareImage addTarget:self action:@selector(shareImageAction:) forControlEvents:UIControlEventTouchUpInside];
         [btnShareImage setTitle:[NSString stringWithFormat:@"%li %li",(long)indexPath.section,(long)indexPath.row] forState:UIControlStateDisabled];
         return cell;
     }
    -(void)shareImageAction:(UIButton*)sender{
        NSString *str=[sender titleForState:UIControlStateDisabled];
        NSArray *ar=[str componentsSeparatedByString:@" "];
        NSIndexPath *indexPath=[NSIndexPath indexPathForRow:[[ar objectAtIndex:1] intValue] inSection:[[ar objectAtIndex:0] intValue]];

        HomeCell *cellObj = (HomeCell*) [yourTableView cellForRowAtIndexPath:indexPath];
        UIImage *imageToShare = [self makeImageofCell:cellObj];

    }
    -(UIImage *)makeImageofCell:(HomeCell*)cellObj
    {
        UIGraphicsBeginImageContext(cellObj.homeImg.frame.size );
        [cellObj.homeImg.layer renderInContext:UIGraphicsGetCurrentContext()];
        [cellObj.overlayText.layer renderInContext:UIGraphicsGetCurrentContext()];
        UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return viewImage;
    }

愿这对你有所帮助。