Мой хак для этого:
1 - создать кнопку, охватывающую весь вид; 2 - отправьте его на задний план вашего представления, 3 - измените его тип с "Round Rect" на "Custom" в Инспекторе атрибутов, 4 - создайте действие 5 - реализуйте метод действия:
- (IBAction)bgTouched:(id)sender
{
//to dismiss keyboard on bg btn pressed
[_userInput resignFirstResponder];
}
где _userInput - ваш выход TextField
Вы хотите win.Sleep (миллисекунды)
, мне кажется.
Да, вы определенно не хотите тратить время на ожидание, как вы описываете.
Я бы реализовал простую функцию, чтобы обернуть функцию сна хост-системы в C.
Чистый Lua использует только то, что есть в стандарте ANSI C. Модуль lposix Луиса Фигерайдо содержит многое из того, что вам нужно для более системных задач.
Вы не можете сделать это в чистом Lua, не потребляя CPU, но есть простой, непереносимый способ:
os.execute ("sleep 1")
(it будет блокировать)
Очевидно, это работает только в операционных системах, для которых "sleep 1" является допустимой командой, например Unix, но не Windows.
Я согласен с Джоном в отношении включения функции сна. Вы также можете использовать эту обернутую функцию сна для реализации функции паузы в lua (которая просто спит, а затем проверяет, менялось ли определенное условие время от времени). Альтернативой является использование крючков.
Я не совсем уверен, что вы имеете в виду, говоря о третьем пункте (разве команды обычно не завершаются до выполнения следующей?), Но ловушки могут помочь и с этим.
См .: Вопрос: Как правильно завершить поток Lua? для примера использования крючков.
[Я собирался опубликовать это как комментарий к сообщению Джона Кромарти , но не понял, что вы не можете использовать форматирование в комментарии.]
Я согласен. Перетаскивание его в оболочку с помощью os.execute () определенно сработает, но в целом вызовы оболочки обходятся дорого. Оборачивание некоторого кода C будет намного быстрее во время выполнения. В C / C ++ в системе Linux вы можете использовать:
static int lua_sleep(lua_State *L)
{
int m = static_cast<int> (luaL_checknumber(L,1));
usleep(m * 1000);
// usleep takes microseconds. This converts the parameter to milliseconds.
// Change this as necessary.
// Alternatively, use 'sleep()' to treat the parameter as whole seconds.
return 0;
}
Затем в main, do:
lua_pushcfunction(L, lua_sleep);
lua_setglobal(L, "sleep");
, где «L» - ваше lua_State. Затем в вашем скрипте Lua, вызываемом из C / C ++, вы можете использовать свою функцию, вызвав:
sleep(1000) -- Sleeps for one second