iOS Control Center касается перехода к моему представлению прокрутки?

У меня есть UIScrollView который прокручивается горизонтально вдоль нижнего края моего приложения. Я заметил ошибку, при которой, если пользователь проводит пальцем вверх, чтобы открыть Центр управления, Центр управления прикрепляется к его пальцу, но мой scrollViewDidBeginDragging метод называется. Проблема в том, что никакой последующий метод завершения не вызывается, то есть мой вид прокрутки думает, что кто-то начал тянуть его и никогда не останавливался.

Известно ли, что при открытии Центра управления (или, я полагаю, тоже центра уведомлений) касания передаются приложению внизу? Это происходит только на устройстве, а не в симуляторе (в симе scrollViewDidBeginDragging метод делегата никогда не вызывается).

Кто-нибудь сталкивался с этим? Кажется, противостоять довольно сложно.

1 ответ

Решение

Я столкнулся с этой ошибкой в ​​iOS 8. Оба вида прокрутки и другие виды с пользовательскими жестами получали прикосновения при выполнении пролистывания от нижнего жеста, чтобы открыть Центр управления. У меня было несколько UIB-кнопок в нижней части экрана, которые также начали бы отслеживать. Ни одна из этих проблем не возникала с iOS 7, использующим один и тот же жест для отображения Центра управления.

Мое исправление для iOS 8 состояло в добавлении следующего кода в методы applicationWillResignActive и applicationDidBecomeActive моего делегата приложения.

- (void)applicationWillResignActive:(UIApplication *)application
{
    [application beginIgnoringInteractionEvents];
    [UIView animateWithDuration:0.25 animations:^{
        for (UIWindow *aWindow in application.windows)
        {
            aWindow.tintAdjustmentMode = UIViewTintAdjustmentModeDimmed;
        }
    }];
}


- (void)applicationDidBecomeActive:(UIApplication *)application
{
    [UIView animateWithDuration:0.25 animations:^{
        for (UIWindow *aWindow in application.windows)
        {
            aWindow.tintAdjustmentMode = UIViewTintAdjustmentModeAutomatic;
        }
    } completion:^(BOOL finished) {
        [application endIgnoringInteractionEvents];
    }];
}

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

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

Надеюсь, это поможет вам.

Другие вопросы по тегам