У меня есть UIScrollView, в котором находится галерея изображений, которые пользователь может прокручивать. Это представление должно быть видно на каждом из трех отдельных UIViewController, которые размещены в UITabBarController. Прямо сейчас у меня есть три отдельных экземпляра UIScrollView в подклассе UITabBarController, и контроллер управляет синхронизацией этих трех (когда пользователь прокручивает тот, который он может видеть, программно прокручивая два других, чтобы соответствовать, и т. Д.), Что не идеально.
Я хотел бы знать, есть ли способ работать только с ОДНЫМ экземпляром UIScrollView, но он должен отображаться только в UIViewController, с которым в данный момент взаимодействует пользователь. Это полностью исключило бы весь код синхронизации. Вот в основном то, что я сейчас имею в UITabBarController (где все это в настоящее время управляется):
@interface ScrollerTabBarController : UITabBarController {
FirstViewController *firstView;
SecondViewController *secondView;
ThirdViewController *thirdView;
UIScrollView *scrollerOne;
UIScrollView *scrollerTwo;
UIScrollView *scrollerThree;
}
@property (nonatomic,retain) IBOutlet FirstViewController *firstView;
@property (nonatomic,retain) IBOutlet SecondViewController *secondView;
@property (nonatomic,retain) IBOutlet ThirdViewController *thirdView;
@property (nonatomic,retain) IBOutlet UIScrollView *scrollerOne;
@property (nonatomic,retain) IBOutlet UIScrollView *scrollerTwo;
@property (nonatomic,retain) IBOutlet UIScrollView *scrollerThree;
@end
@implementation ScrollerTabBarController
- (void)layoutScroller:(UIScrollView *)scroller {}
- (void)scrollToMatch:(UIScrollView *)scroller {}
- (void)viewDidLoad {
[self layoutScroller:scrollerOne];
[self layoutScroller:scrollerTwo];
[self layoutScroller:scrollerThree];
[scrollerOne setDelegate:self];
[scrollerTwo setDelegate:self];
[scrollerThree setDelegate:self];
[firstView setGallery:scrollerOne];
[secondView setGallery:scrollerTwo];
[thirdView setGallery:scrollerThree];
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
[self scrollToMatch:scrollView];
}
@end
UITabBarController получает уведомление (как делегат представления прокрутки), когда пользователь прокручивает один из экземпляров, а затем вызывает методы, такие как scrollToMatch:
, для синхронизации двух других с выбором пользователя.
Есть ли что-то, что можно сделать, используя отношение «многие-к-одному» в IBOutlet или что-то подобное, чтобы сузить это до одного экземпляра, чтобы мне не приходилось управлять тремя видами прокрутки? Я попытался сохранить один экземпляр и переместить указатель из одного представления в другое, используя методы UITabBarControllerDelegate (вызывая setGallery:nil
для текущего и setGallery:scrollerOne
для следующего каждый раз, когда он изменялся), но скроллер никогда не перемещался на другие вкладки .
Заранее спасибо!