Как синхронизировать прокрутку с несколькими UIScrollViews? - PullRequest
8 голосов
/ 14 декабря 2011

У меня есть 2 UIScrollView, отображающих изображение каждое (обзор и режим масштабирования). Я могу прокрутить оба вида по отдельности, теперь я хочу синхронизировать центральную точку обоих видов.

Полагаю, когда одно из представлений создает события, мне нужно перенаправить их также в другое представление, но я просто не могу определить, какие функции актуальны. Есть намеки?

edit: Если параллельная прямая прокрутка невозможна, я хочу по крайней мере синхронизировать после события прокрутки.

Ответы [ 2 ]

15 голосов
/ 14 декабря 2011

Проверьте функции

Можносвяжите это вместе в методе делегата -scrollViewDidScroll: , который постоянно вызывается во время прокрутки пользователем.

3 голосов
/ 09 октября 2013

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

Чтобы синхронизировать scrollViews между различными классами, используйте NSNotificationCenter для наблюдения за определенным уведомлением.

Когда происходит прокрутка, тогда в методе делегирования -scrollViewDidScroll: используйте NSNotificationCenter , чтобы опубликовать уведомление (с userInfo содержимым как scrollView.contentOffset.x & scrollView.contentOffset.y ) Пример:

-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
NSMutableDictionary *userInfo = [[NSMutableDictionary alloc]init];
[userInfo setObject:[NSNumber numberWithFloat:scrollView.contentOffset.x]
          forKey:@"offsetX"];
[userInfo setObject:[NSNumber numberWithFloat:scrollView.contentOffset.y]
          forKey:@"offsetY"];

[[NSNotificationCenter defaultCenter] postNotificationName:@"scrollSync"
                                      object:nil
                                      userInfo:userInfo];
}

Зарегистрируйтесь для получения этого уведомления в том же классе или любом другом классе и выполните -setContentOffset: метод для scrollView / s, который вы хотите синхронизировать.
.
Пример добавления Observer (либо в didLoad, либо в init, либо в любом другом подходящем вам месте во всех классах.как вам нравится):

[[NSNotificationCenter defaultCenter] addObserver:self
                                      selector:@selector(handleNotification:)
                                      name:@"scrollSync" object:nil];

.
Пример метода выбора

-(void)handleNotification:(NSNotification *)sender
{
float newX = [[sender.userInfo objectForKey:@"offsetX"] floatValue];
float newY = [[sender.userInfo objectForKey:@"offsetY"] floatValue];

[myOtherScrollView setContentOffset:CGPointMake(newX,newY)];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...