Выполнить анимацию в main_queue в Objective C, почему? - PullRequest
0 голосов
/ 27 апреля 2018

Я работаю над кодом, который был сделан другим парнем из моей компании, который ушел, и есть кое-что, чего я не понимаю, почему он это сделал: я настраиваю свои слушатели клавиатуры на функцию [self setKeyboardListenersInRegisterView]

код:

- (void)setKeyboardListenersInRegisterView {
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(onKeyboardHideInRegisterView:)
                                                 name:UIKeyboardWillHideNotification
                                               object:nil];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(onKeyboardShowInRegisterView:)
                                                 name:UIKeyboardWillShowNotification
                                               object:nil];
}

Но он вызывает эту функцию здесь:

 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

        //listener for keyboard show/hide
        [self setKeyboardListenersInRegisterView];
        [self.studentUsernameTextField becomeFirstResponder];
        [self.studentUsernameTextField addTarget:self.studentPasswordTextField action:@selector(becomeFirstResponder) forControlEvents:UIControlEventEditingDidEndOnExit];
    });

Итак, вы, ребята, знаете, почему он вызывает функцию внутри main_queue, а не вне ее? Важно отметить, что селекторы уведомлений моей клавиатуры выполняют анимацию (просто настраивая вид на несколько пикселей вверх, чтобы увидеть, что пишет пользователь).

1 Ответ

0 голосов
/ 27 апреля 2018

Если вы пытаетесь говорить с интерфейсным объектом каким-либо образом, формой или формой иначе, чем в основном потоке, вы делаете неправильно. В Xcode 9 вы на самом деле испытываете затруднения из-за этого (при условии, что в вашей схеме включена проверка основного потока, что вам определенно следует сделать).

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