В настоящее время я пишу приложение, которое читает файл и помещает заголовки в список. При щелчке по каждому заголовку он переключается на контроллер с CATextLayer, содержащим текст, связанный с этим заголовком (обычно несколько абзацев). Первоначально я использовал UITextView, однако обнаружил, что мне нужны дополнительные параметры форматирования (а именно выравнивание по ширине), и переключился на CATextLayer.
Я читал в других вопросах здесь, что CATextLayer изначально прокручивается, однако я не могу найти, как вызвать такое поведение. Когда я попытался установить contentsRect
, мой текст полностью исчезает из вида.
Это мой установочный код, который работает отдельно от прокрутки:
CATextLayer *textLayer = [[CATextLayer alloc] init];
textLayer.alignmentMode = kCAAlignmentJustified;
textLayer.string = [_data objectForKey:@"Text"];
textLayer.wrapped = YES;
textLayer.frame = CGRectMake(27, 75, 267, 320);
textLayer.font = [UIFont fontWithName:@"Helvetica" size:17.0f];
textLayer.foregroundColor = [UIColor blackColor].CGColor;
textLayer.backgroundColor = [UIColor whiteColor].CGColor;
[textLayer setCornerRadius:8.0f];
[textLayer setMasksToBounds:YES];
[textLayer setBorderWidth:1.0f];
[textLayer setBorderColor:[UIColor grayColor].CGColor];
[self.view.layer addSublayer:textLayer];
[textLayer release];
Я просмотрел документацию для CATextLayer и множество других вопросов SO и не нашел того, что искал.
РЕДАКТИРОВАТЬ: Возможно прокрутить этот класс, однако это необходимо сделать программно, используя смещения contentsRect
. Он может быть вложен в CAScrollLayer
для некоторых вспомогательных функций (scrollToPoint
и scrollToRect
) и немного более аккуратного набора вычислений. CAScrollLayer
также требует, чтобы программист обрабатывал сенсорные события, поэтому для простоты я не буду следовать этому маршруту.
Для тех, кто хотел бы пройти этот маршрут с CAScrollLayer
, мой код установки изменился на следующее:
CAScrollLayer *scrollLayer = [[CAScrollLayer alloc] init];
scrollLayer.frame = CGRectMake(27, 75, 267, 320);
scrollLayer.backgroundColor = [UIColor whiteColor].CGColor;
scrollLayer.scrollMode = kCAScrollVertically;
[scrollLayer setCornerRadius:8.0f];
[scrollLayer setMasksToBounds:YES];
[scrollLayer setBorderWidth:1.0f];
[scrollLayer setBorderColor:[UIColor grayColor].CGColor];
scrollLayer.contentsRect = CGRectMake(0, 0, 250, 350);
scrollLayer.contentsGravity = kCAGravityCenter;
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)])
{
scrollLayer.contentsScale = [[UIScreen mainScreen] scale];
}
CATextLayer *textLayer = [[CATextLayer alloc] init];
textLayer.alignmentMode = kCAAlignmentJustified;
textLayer.string = [_notice objectForKey:@"Text"];
textLayer.wrapped = YES;
textLayer.frame = CGRectMake(5, 5, 250, 500);
textLayer.font = [UIFont fontWithName:@"Helvetica" size:17.0f];
textLayer.foregroundColor = [UIColor blackColor].CGColor;
textLayer.backgroundColor = [UIColor whiteColor].CGColor;
[scrollLayer addSublayer:textLayer];
[self.view.layer addSublayer:scrollLayer];
[scrollLayer release];
[textLayer release];