以编程方式截取屏幕截图时,在UIImageView中查找标签的位置和大小?

时间:2013-01-13 17:59:21

标签: objective-c xcode uiimageview uilabel

我正在创建一个应用程序,允许用户在其图像上放置文本,并将其保存到相机胶卷。我实现这一点的方式是在用户选择或拍照后,然后呈现文本字段。然后,此文本字段将更改标签的文本。我在标签上放置了手势识别器,以便用户可以平移标签,捏缩放以及旋转标签。

借助stackoverflow的帮助,我能够成功地在图像顶部截取标签的屏幕截图。但是,保存到相机胶卷时,它无法识别图像顶部的标签尺寸或位置。任何帮助将不胜感激。

这是我将图像保存到相机胶卷的地方

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
     if (buttonIndex == 0)
{

    UIGraphicsBeginImageContext(_image.size);


    [_image drawInRect:CGRectMake(0, 0, _image.size.width, _image.size.height)];

    [_textLabel drawTextInRect:CGRectMake((_image.size.width - _textLabel.frame.size.width)/2, (_image.size.height - _textLabel.frame.size.height)/2, _textLabel.frame.size.width, _textLabel.frame.size.height)];

    UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"WRDIT"
                                                      message:@"Your image has been saved to the Camera Roll"
                                                     delegate:self
                                            cancelButtonTitle:nil
                                            otherButtonTitles:@"OK", nil];

    [message show];

    UIImageWriteToSavedPhotosAlbum(resultingImage, nil, nil, nil);
}
}

2 个答案:

答案 0 :(得分:0)

我不是100%肯定,但您可以尝试使用drawInRect:withFont:lineBreakMode:alignment:代替drawTextInRect。 Apple文档说不要直接致电drawTextInRect

  

drawTextInRect:

     

在指定的矩形中绘制接收者的文本(或其阴影)。

- (void)drawTextInRect:(CGRect)rect
     

参数

     

RECT

     

用于绘制文本的矩形。

     

讨论

     

您不应该直接调用此方法。此方法应该只是   被想要修改默认图形的子类覆盖   标签文本的行为。

以下是文档说使用的方法:

  

drawInRect:withFont:lineBreakMode:alignment:

     

使用指定的方法在当前图形上下文中绘制字符串   边界矩形,字体和属性。

- (CGSize)drawInRect:(CGRect)rect withFont:(UIFont *)font 
                             lineBreakMode:(UILineBreakMode)lineBreakMode
                                 alignment:(UITextAlignment)alignment

答案 1 :(得分:0)

所以我明白了。我将UIImage和UILabel放在UIView中。

然后我这样做了:

 UIGraphicsBeginImageContextWithOptions(_containerView.bounds.size, _containerView.opaque, 0.0);

    [_containerView.layer renderInContext:UIGraphicsGetCurrentContext()];

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

这允许我处理平移,旋转和缩放。然后我可以将此图像保存到相机胶卷或将其发送到FB,Twitter等等。