我已经使用CATextLayer一起显示粗体和普通文本。现在我有时间从Web服务响应中获取长文本,所以我无法显示完整的文本。任何人都可以帮助我应该是什么方式使CATextLayer对象像textview一样可滚动。请告诉我有关此问题的任何解决方案。我也参考Here,但它不适用于我。我正在使用此代码:
/ *按需创建文本图层* /
if (!_textLayer) {
_textLayer = [[CATextLayer alloc] init];
//_textLayer.font = [UIFont boldSystemFontOfSize:13].fontName; // not needed since `string` property will be an NSAttributedString
_textLayer.backgroundColor = [UIColor clearColor].CGColor;
_textLayer.wrapped = YES;
//CALayer *layer = self.navigationController.toolbar.layer; //self is a view controller contained by a navigation controller
_textLayer.frame = CGRectMake(5,325, 310, 90);
_textLayer.contentsScale = [[UIScreen mainScreen] scale]; // looks nice in retina displays too :)
_textLayer.alignmentMode = kCAAlignmentJustified;
_textLayer.masksToBounds = YES;
[self.view.layer addSublayer:_textLayer];
}
在底部我也尝试将我的_textLayer添加到UITextView的图层而不是self.view.layer。
请建议我如何实现此功能?
答案 0 :(得分:4)
您可以将您的CATextLayer添加到UIScrollView并免费滚动。 根据需要设置scrollview的框架,将contentSize设置为CATextLayer框架,并将其添加到滚动图层,类似这样(实际上不是工作代码):
UIScrollView* scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(0,0,100,100)];
CATextLayer* layer = [CATextLayer layer];
//layer init code goes here
scroll.contentSize = CGSizeMake(1000,1000);//or your actual text layer size
[scroll.layer addSublayer:layer];
你完成了!不要忘记将滚动添加为视图子视图。
答案 1 :(得分:0)
使用NSString的方法sizeWithFont:constrainedToSize:
获取具有给定字体的文本的边界矩形,然后使用此大小设置图层的框架:
NSString* myString = ....;
CGSize size = [myString sizeWithFont:[UIFont systemFontOfSize:12] constrainedToSize:CGSizeMake(100, 100)];
_textlayer.frame = CGRectMake(0,0,size.width,size.height);
请不要忘记使用适当的字体/约束大小。