Как синхронизировать анимацию с анимацией CAScrollLayer - PullRequest
1 голос
/ 09 сентября 2011

У меня есть табличное прокручиваемое представление с разделами.Структура макета находится на правильной картинке.enter image description here

Вид имеет слой прокрутки с разделами.Каждый раздел имеет заголовок и строки.Когда я прокручиваю вверх, мне нужно, чтобы заголовок раздела оставался видимым над строками, как в обычном UITableView.enter image description here

Когда я прокручиваю слой, я передаю позицию прокрутки в раздел, чтобы он мог настроить положение заголовка.В представлении:

- (void)updateContentVerticalScrollPosition
{
    [CATransaction begin];
    [_scrollableContentLayer scrollToRect:scrollRect];
    [_section setVerticallScrollPositionInSuperlayer:_verticalScrollPosition];
    [CATransaction commit];
}

В разделе я обновляю позицию заголовка:

_titleLayer.position = CGPointMake(0, titleLayerVerticalPosition);

Это работает, но даже при использовании транзакции слой прокрутки и перемещение заголовкас разной скоростью.Итак, похоже, что титровальный слой является плавающим.

Кто-нибудь знает, как синхронизировать анимацию слоя прокрутки и титровального слоя?

1 Ответ

1 голос
/ 26 сентября 2011

Я нашел решение. NSScrollLayer не использует функцию синхронизации по умолчанию для анимации прокрутки, но линейную. Итак, все, что нам нужно, это изменить действие клавиши @ "position".

CABasicAnimation* animation = [[CABasicAnimation alloc] init];
animation.duration = 0.25;
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];       
[_titleLayer setActions:[NSDictionary dictionaryWithObject:animation forKey:@"position"]];
[animation release];
...