Вложенный UIScrollView не отскакивает и не обнаруживает медленные жесты смахивания, когда отказов установлено на NO - PullRequest
4 голосов
/ 07 марта 2011

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

У меня есть вложенные просмотры прокрутки в моем приложении для iPad.Пока все хорошо, у всего есть свои взлеты и падения, но это довольно гладко и отзывчиво.Мой внешний вид прокрутки - постраничный, который содержит полноэкранные или большие просмотры контента.Внешний вид прокрутки горизонтальный и внутренний вертикальный.Понравилась фотогалерея одна.Я обнаружил, что при масштабировании и прокрутке внутреннего прокрутки наблюдается заметная задержка в обнаружении медленных и длинных жестов прокрутки ТОЛЬКО когда прокрутка прокручивается вниз к нижней части содержимого, а отскок отключен.

Другое дело, что свойство отскок внутреннего прокрутки идет ДА ​​/ НЕТ псевдослучайно.Итак, это код в конструкторе, который устанавливает внутренние прокручивающиеся представления:

    if (UIInterfaceOrientationIsPortrait(forOrientation)) {
        self.minimumZoomScale = 1.0;
        self.maximumZoomScale = 1.0;    
        self.bounces = NO;
        self.alwaysBounceVertical = NO;
        self.scrollEnabled = NO;
    }else if (UIInterfaceOrientationIsLandscape(forOrientation)){
        self.minimumZoomScale = 1.333333f;
        self.maximumZoomScale = 1.333333f;
        self.bounces = YES;
        self.alwaysBounceVertical = YES;
        self.scrollEnabled = YES;
    }

    self.scrollsToTop = NO;
    self.showsVerticalScrollIndicator = YES;
    self.showsHorizontalScrollIndicator = NO;
    self.directionalLockEnabled = YES;
    self.delegate = self;



    self.pagingEnabled = NO;

    self.canCancelContentTouches = NO;
    self.delaysContentTouches = YES;

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

Это ошибка?или это только я, что я все испортил?

спасибо заранее за ваше время и интерес!

ОБНОВЛЕНИЕ: я вложил два вида прокрутки, которые на самом деле являются подклассами UIScrollView.Я делаю это, потому что мне нужно переопределить hitTest и другими методами.Я также попробовал лучшее решение, описанное здесь http://openradar.appspot.com/8045239, но не получило хороших результатов.

Ответы [ 2 ]

3 голосов
/ 05 апреля 2011

Я отвечаю на свой вопрос.

Раскройте решение для ошибок от радара, которое размещено в посте с вопросом, не очень понятно, что нужно изолировать, чтобы помешать просмотру uiscrollview изменить размер и отменить скачки

По сути, ВСЕ, что может изменить кадр представления во время layoutSubViews, должно выполняться только ОДИН РАЗ, дважды проверяя, что если размер равен изменению, закодированному в layoutSubviews, то это не выполняется более одного раза.

-(void)layoutSubviews {

///...


if (!self.bounces) {
             self.bounces = YES;
        }
        if(!self.scrollEnabled){
           self.scrollEnabled = YES;
        }
        if (!CGSizeEqualToSize(rect.size, self.contentSize)) {
            self.contentSize = rect.size;
        }
 if (self.zoomScale < MAXIMUM_ZOOM_SCALE ) {

            [self zoomToRect:ZOOM_RECT_MAKE animated:NO];// otherwise this line of code won't do anything at all


        }
}
0 голосов
/ 19 марта 2011

Вложенные просмотры прокрутки всегда приводят к проблемам сенсорного респондента. Я предполагаю, что внутренняя часть является основной - с кем пользователи взаимодействуют больше? В общем, вам, вероятно, придется написать некоторые из ваших собственных респондентов (по крайней мере, это был мой опыт, как в коде, так и вокруг SO). Сделайте вертикальную прокрутку более прощающей, но обнаруживайте только узкий диапазон движений и перетаскиваний (почти горизонтальные линии) для внешнего. Таким образом, большинство сенсорных входов будет отправлено на внутренний вид.

Что касается подпрыгивания, удалите одно из мест, где вы устанавливаете свойство, и посмотрите, что произойдет.

В каком методе это? Надеюсь, этот код находится в подклассе UIView…?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...