Как я могу сделать свой объект CATextLayer прокручиваемым, как UITextView?

Я использовал CATextLayer для одновременного отображения полужирного и обычного текста. Сейчас я получаю длинный текст из ответа веб-службы, поэтому я не могу отображать полный текст. Может ли кто-нибудь помочь мне, как сделать объект CATextLayer Прокручиваемый, как текстовое представление. Пожалуйста, предложите мне какое-либо решение по этому поводу. работает на меня. Я использую этот код:

/* Создаем текстовый слой по требованию */

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.

Пожалуйста, предложите, как я могу реализовать эту функцию?


person Ankit Vyas    schedule 20.11.2012    source источник


Ответы (2)


Вы можете просто добавить свой CATextLayer в UIScrollView и получить прокрутку бесплатно. Установите кадр прокрутки по мере необходимости и 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];

и готово! Не забудьте добавить прокрутку в качестве подвида просмотра.

person Oladya Kane    schedule 20.11.2012
comment
Не могли бы вы дать мне еще 1 ответ, если это возможно? Что мне делать для установки динамической высоты _textLayer. У меня есть NSString с текстовым значением. - person Ankit Vyas; 20.11.2012

Используйте метод 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);

Только не забудьте использовать соответствующий размер шрифта/ограничения.

person Oladya Kane    schedule 21.11.2012
comment
Спасибо вам большое за добрый отклик. - person Ankit Vyas; 21.11.2012