Вложенный UIScrollView не будет прокручиваться при увеличении внешнего вида - PullRequest
0 голосов
/ 10 февраля 2011

У меня возникают серьезные проблемы при вложении UIScrollViews.

У меня есть внешнее прокручиваемое представление прокрутки, которое выполняет прокручиваемую прокрутку с помощью своих подпредставлений UIScrollView. Эти подпредставления содержат подпредставление, в котором есть CALayer с большим изображением. Всякий раз, когда это необходимо, к этим подпредставлениям CALayer можно добавить небольшой скролл-вид, который действует как маленькие картинные галереи. Эти галереи имеют свой собственный viewcontroller, который называется SlideViewController.

вид
|
v
mainScrollView
|
v
UIScrollView (страница)
|
v просмотр с CALayer
|
v
ScrollView как галерея.

Все работает как шарм, пока ipad не будет повернут в альбомную ориентацию, а представление прокрутки страницы увеличено на 33%.

Все подпредставления на своем месте. их границы правильны, так же как и их рамки. Дело в том, что когда я пролистываю маленькие галереи, они больше не прокручиваются. Большая страница делает. Я попытался установить для canCancelContentTouches значение NO для всех задействованных видов прокрутки.

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

Я попытался установить галереи в качестве первого респондента, когда я вызвал init для них. Без дальнейших результатов.

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

Если я проведу пальцем в обычном режиме, иногда большая прокрутка прокрутки крадет свайп и меняет страницу, а иногда маленькая галерея сначала его ловит.

это происходит только тогда, когда масштаб прокрутки, содержащий слой CA (страницу), увеличен в остальном работает потрясающе без каких-либо проблем.

Я прикручиваю цепь UIResponder? Как я мог это исправить?

Я мог бы вставить вам некоторые фрагменты кода, но это включает несколько классов, которые я не знаю, какие из них могут быть полезны или нет.

Заранее спасибо

1 Ответ

2 голосов
/ 11 февраля 2011

Я отвечу на свой вопрос на случай, если кто-нибудь с этим столкнется.

Сначала ПРОЧИТАЙТЕ ---> это

Во-вторых, сейчас происходит то, что внешние и внутренние прокрутки борются за сенсорные события, отправляемые каждый раз, когда вы касаетесь экрана. Поскольку распознаватели жестов, такие как распознаватели пролистывания, для распознавания касательных подпредставлений внешнего вида могут затрачиваться некоторое время, это может привести к тому, что когда вы выполняете прокрутку во внутренних видах, иногда это работает, а иногда нет.

Что я сделал, так это подклассифицировал представления, включенные в цепочку респондента. Не все из них. только самый внутренний и самый внешний, который на самом деле является первым респондентом.

В первом подклассе респондента (в моем случае это UIView) тест попадания переопределения. Я получил фрагмент кода и идею из этого вопроса: Как украсть касания из UIScrollView?

- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
    UIView* result = [super hitTest:point withEvent:event];

    if ([result.superview isKindOfClass:[SlideView class]])
    {
        self.scrollEnabled = NO;
    }
    else 
    {
        self.scrollEnabled = YES;    
    }
    return result;
}

ПОЧЕМУ? Потому что вы хотите отключить прокрутку из внешнего вида. Таким образом распознаватели считываний будут отключены и оставят ваше внутреннее представление прокрутки в покое и свободны, чтобы захватывать касания в любое удобное время. Это также способствует повышению точности прокрутки для пользователя.

Хорошо. Удачи. Я собираюсь совершить это. ; -)

...