Как иметь не прокручивающийся контент в UIScrollView - PullRequest
1 голос
/ 17 января 2012

Мне нужно что-то вроде этого

+ scrollview
|
|__ moving content
|
|__ non moving content

Сложность в том, что я модифицирую существующий фрагмент кода, где я не могу использовать scrollview parent, чтобы установить «неподвижный контент» как дочерний. Не движущийся контент должен быть ребенком прокрутки. Я думал о том, чтобы прикрепить его к фону, но Я не знаю, как получить доступ к фоновому представлению UIScrollview.

1 Ответ

3 голосов
/ 17 января 2012

Я считаю, что «рекомендуемый» способ сделать это - переопределить layoutSubviews в пользовательском подклассе UIScrollView.Это было охвачено (IIRC) в сеансе WWDC 2010, который вы должны получить, если вы являетесь участником программы разработчика.

Если вы не можете создать подкласс UIScrollView (учитывая ваши ограничения на изменение существующего кода), выможет сделать что-то вроде следующего.

Пусть «staticView» будет «неподвижным контентом», который вы хотите сохранить фиксированным:

UIView *staticView;

Создайте ivar (возможно, в вашем контроллере представления) дляудерживайте его начальный центр:

CGPoint staticViewDefaultCenter = [staticView center]; // Say, in viewDidLoad

Сделайте ваш контроллер представления делегатом представления прокрутки, если это еще не сделано, затем реализуйте что-то вроде следующего:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGPoint contentOffset = [scrollView contentOffset];
    CGPoint newCenter = CGPointMake(staticViewDefaultCenter.x + contentOffset.x,
                                    staticViewDefaultCenter.y + contentOffset.y);
    [staticView setCenter:newCenter];
 }

Это будет охватывать простоеслучай прокручиваемого представления.Обработка масштабируемого представления становится немного сложнее и будет зависеть отчасти от того, как вы реализовали свой метод viewForZoomingInScrollView:, но следует аналогичной процедуре (на этот раз в scrollViewDidZoom: конечно).

Я не продумалпоследствия преобразования в вашем staticView - вам, возможно, придется сделать некоторые манипуляции и в этом случае.

...