Как я могу сделать мой объект CATextLayer Scrollable как UITextView?
Я использовал CATextLayer для совместного отображения полужирного и обычного текста. Теперь, когда я получаю длинный текст из ответа веб-службы, я не могу отобразить полный текст. Может кто-нибудь, пожалуйста, помогите мне, каким должен быть способ сделать объект CATextLayer Прокручиваемый как textview. Пожалуйста, предложите мне какое-либо решение по этому поводу. Я также взял ссылку здесь, но это не работает для меня. Я использую этот код:
/ * Создать текстовый слой по запросу */
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 ответа
Вы можете просто добавить свой CATextLayer в UIScrollView и получить бесплатную прокрутку. Установите фрейм scrollview по мере необходимости и contentSize как ваш фрейм CATextLayer и добавьте его в слой scroll, что-то вроде этого (на самом деле не рабочий код):
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];
и все готово! Не забудьте добавить прокрутку в качестве своего подпредставления просмотра.
Используйте метод 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);
Только не забудьте использовать соответствующий размер шрифта / ограничения.