有时使用drawInRect无法成功绘制AttributedString

时间:2014-01-25 09:12:31

标签: ios uikit uilabel nsattributedstring uigraphicscontext

我的UILabel带有属性字符串,用户可以编辑并最终在图像上绘制。以下是每次用户更改UILabel中的文字并确认时更新UITextview的方式。

 - (void)displayPicture {
    [self.view endEditing:YES];
    self.attributedStr = [[NSAttributedString alloc] initWithString:self.textInputField.text attributes:self.attributes];
    self.displayField.attributedText = [[NSAttributedString alloc] initWithString:self.textInputField.text attributes:self.attributes];
    self.displayField.lineBreakMode = NSLineBreakByCharWrapping;
    [self.displayField sizeToFit];
    [self.displayField setNeedsDisplay];
    self.textInputField.hidden = YES;
    self.tapRecog.enabled = YES;
    self.displayField.hidden = NO;
}

现在UILabel会在屏幕上显示所需的方式。

当用户想要将Pic +文本组合成UIImage并发布时,将实现以下代码:

- (UIImage *)generatePicture {
UIGraphicsBeginImageContextWithOptions(CGSizeMake(Picture_Standard_Width, Picutre_Standard_Height), YES, 0.0f);
[self.bgImageView.image drawInRect:CGRectMake(0, 0, Picture_Standard_Width, Picutre_Standard_Height)];
CGRect originalFrame = self.displayField.frame;
CGRect adjustedFrame = CGRectMake(originalFrame.origin.x, originalFrame.origin.y - self.bgImageView.frame.origin.y, originalFrame.size.width, originalFrame.size.height);
[self.displayField.attributedText drawInRect:adjustedFrame];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
self.imageToUpload = newImage;
UIGraphicsEndImageContext();
return self.imageToUpload;
}

大多数情况下,属性仅在生成的图像中显示一行或两行。它很可能与框架有关。我很容易被这样一个事实所困惑:属性字符串在标签中显示得很好,而在我绘制时则不同。

任何有关正确绘制referencedString的帮助都将非常感激。

1 个答案:

答案 0 :(得分:0)

当您开始拍摄照片时,您将开始绘制新的上下文。

上下文是图像,0,0是图像角落。

所以你必须调整你的原始框架,以考虑到你现在不再进入视图的上下文而是进入图像的上下文