我正在使用UITextView来呈现一些文本。我使用以下代码来渲染我的主视图更大,以设置输出更高的res(我也按相同因子缩放所有子视图)。
UIGraphicsBeginImageContext(CGSizeMake(ImageView.frame.size.width*4, ImageView.frame.size.height*4));
[outputView setFrame:CGRectMake(outputView.frame.origin.x, outputView.frame.origin.y, outputView.frame.size.width*4, outputView.frame.size.height*4)];
[[outputView layer] renderInContext:UIGraphicsGetCurrentContext()];
在缩放方面工作正常。唯一的问题是,如果它是“屏幕外”,UITextView元素将无法正确呈现。所以在没有* 4比例因子的情况下,所有内容都可以很好地呈现,但是使用它时,屏幕上推出的UITextView元素不能正确呈现(大多数只是空白)。
有没有办法覆盖它,强制它渲染?
感谢您阅读
答案 0 :(得分:2)
这样做:
CGAffineTransform newtransform = CGAffineTransformMakeScale(4.0, 4.0);
self.view.transform = newtransform;
CGRect newFrame = CGRectApplyAffineTransform(self.view.frame, newtransform);
//CGSize fittingSize = [yourTextView sizeThatFits:CGSizeZero];
UIGraphicsBeginImageContext(newFrame.size);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImahe *capImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
答案 1 :(得分:0)
使用标签结束,仅用于渲染。因此,UIText视图用于在界面中显示和交互,但它们被临时隐藏并被标签替换以进行渲染。
答案 2 :(得分:0)
基于Mrwolfy的答案,我还设法通过将UITextView
的内容复制到UILabel
中来解决了类似的问题-无论出于何种原因,它的行为似乎都有些不同。这是我使用的代码:
UILabel* contents = [[UILabel alloc] initWithFrame:textView.frame];
[textView.superview addSubview:contents];
contents.numberOfLines = 0;
contents.lineBreakMode = NSLineBreakByWordWrapping;
contents.attributedText = textView.attributedText;
textView.hidden = YES;
// Now render the scrollview in slices
for (CGFloat y = 0; y < scrollView.contentSize.height; y += scrollView.frame.size.height) {
[scrollView setContentOffset:CGPointMake(0, y) animated:NO];
[scrollView.layer renderInContext:context];
}
textView.hidden = NO;
[contents removeFromSuperview];