如何使我的CATextLayer对象像UITextView一样可滚动?

时间:2012-11-20 12:53:57

标签: uiscrollview calayer quartz-core catextlayer

我已经使用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。

请建议我如何实现此功能?

2 个答案:

答案 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);

请不要忘记使用适当的字体/约束大小。