Я считаю, что «рекомендуемый» способ сделать это - переопределить 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 - вам, возможно, придется сделать некоторые манипуляции и в этом случае.