Подтвердить что ты не робот

Отключить все входные данные, в то время как вращение UIActivityIndicatorView

Как отключить все входные данные, когда крутится UIActivityIndicatorView?

Спасибо

4b9b3361

Ответ 1

Вы можете вызвать beginIgnoringInteractionEvents, когда вы запустите spinner

[[UIApplication sharedApplication] beginIgnoringInteractionEvents];

и endIgnoringInteractionEvents, когда вы остановите его.

[[UIApplication sharedApplication] endIgnoringInteractionEvents];

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

Ответ 2

Просто добавление к ответу rokjarc. Вот пример сторожевого пса, чтобы сохранить приложение в живых. Вы можете звонить всегда с некоторым критическим интервалом, может быть, 10 секунд. И если вам нужно включить в течение 10 секунд, просто вызовите метод "enable".

UIWindow * __weak mainWindow;

- (void)disableGlobalUserInteractionForTimeInterval:(NSTimeInterval)interval
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        mainWindow = [[[UIApplication sharedApplication] windows] lastObject];
    });

    [mainWindow setUserInteractionEnabled:false];

    if (interval > 0)
    {
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(interval * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            [self enableGlobalUserInteraction];
        });
    }
}

- (void)enableGlobalUserInteraction
{
    if (mainWindow)
    {
        [mainWindow setUserInteractionEnabled:true];
    }
}

Ответ 3

В Swift 3.0:

Чтобы отключить взаимодействие:

UIApplication.shared.beginIgnoringInteractionEvents() 

Чтобы восстановить взаимодействие:

UIApplication.shared.endIgnoringInteractionEvents()