Objective c 以编程方式拍摄屏幕截图时,是否在UIImageView中查找标签的位置和大小?

Objective c 以编程方式拍摄屏幕截图时,是否在UIImageView中查找标签的位置和大小?,objective-c,xcode,uiimageview,uilabel,Objective C,Xcode,Uiimageview,Uilabel,我正在创建一个应用程序,允许用户将文本放置在他们的图像上,并将其保存到相机卷中。我实现这一点的方式是,在用户选择或拍摄照片后,它们会显示一个文本字段。然后,此文本字段将更改标签的文本。我在标签上放置了手势识别器,以便用户可以平移标签、捏缩缩放和旋转标签 在stackoverflow的帮助下,我成功地在图片上方拍摄了标签的屏幕截图。但是,当保存到“摄影机滚动”时,它无法识别图像顶部的标签大小或位置。任何帮助都将不胜感激 这里是我将图像保存到相机卷的地方 - (void)actionSheet:(U

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

在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);
}
}

我不是100%确定,但您可以尝试使用
drawInRect:withFont:lineBreakMode:alignment:
而不是
drawTextInRect
。苹果的文档说不要直接调用
drawTextInRect

drawTextInRect:

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

- (void)drawTextInRect:(CGRect)rect
参数

直肠

要在其中绘制文本的矩形

讨论

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

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

drawInRect:withFont:lineBreakMode:alignment:

在当前图形上下文中使用指定的 边框、字体和属性

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

所以我想出来了。我将UIImage和UILabel放置在UIView中

然后我做了这个:

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

    [_containerView.layer renderInContext:UIGraphicsGetCurrentContext()];

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

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

非常感谢您的回复。然而,我有点困惑,如何在我的actionsheet方法中实现这一点?我认为您只是简单地用drawInRect替换drawTextInRect。当然,您需要提供额外的参数。再说一次,我不知道这是否是确切的问题,但医生说不要直接给drawTextInRect打电话。谢谢。我会更仔细地研究,等我弄明白了再告诉你。