Система стилей Ангстрема
Несколько дней назад я написал про неё в английском блоге, теперь пишу по-русски.
Когда мы с Шуриком делали Ангстрем, наш мегаконвертер для Айфона (поставьте, если ещё не), мы придумали технологию Ångström Style System, которая ловко сокращается до слова ÅSS.
ÅSS — это движок стилей для Какао-приложений с синхронизация через Дропбокс. Стили обновляются, если потрясти телефон (шейк-ту-рефреш называется). Это суперспособ разделить код и дизайн. Благодаря нему я попробовал кучу разных цветовых схем, шрифтов, отступов, а главное, покрутил по-разному анимации. При этом не приходилось докучать Шурика просьбами «а давай попробуем ещё вот так» по двадцать восемь раз в день.
Курсор
Любимая заморочка в Ангстреме — анимация текстового курсора:
Это гифка, лучше смотреть в настоящем приложении (бесплатно).
Как я уже писал, я хотел длинный курсор, чтобы он торчал вверх и вниз за пределы текстовой строки. Но я ещё хотел, чтобы он приятно растягивался и отпружинивался, вместо того, чтобы просто мигать. Что это значит технически — да хрен его знает, надо крутить. Невозможно просто так взять и написать, насколько что должно тянуться и за какое время. Хотелось поподбирать все параметры.
Я описал Шурику в общих чертах, что хотел, и попросил дать мне вожжи для управления длиной и прозрачностью курсора в обоих крайних состояниях, а так же временем перехода между ними. Поиграв немного с этими числами, я понял, что правильной анимации с ними не добиться, поэтому пришлось попросить ещё добавить параметры для управления типом анимации, задержками в крайних положениях и шириной курсора.
В итоге после нескольких часов подбора цифирок получилось вот так:
"cursor": {
"showTime": 0.2,
"hideTime": 0.2,
"color": "@colors.textNumberColor",
"period12": 0.4,
"timingType12": "linear",
"period21": 0.2,
"timingType21": "easeOut",
"height1": 48.0,
"width1": 2.0,
"delay1": 0.3,
"alpha1": 1.0,
"height2": 78.0,
"width2": 1.0,
"delay2": 0.1,
"alpha2": 0.33
},
Это примерно 3% всей «таблицы стилей» Ангстрема.
Синхронизация через Дропбокс и шейк-ту-рефреш
Это две главных радости.
Вообще вынести переменные, связанные со стилем, в отдельный файл — само по себе хорошая идея. Уже так я мог бы играть с разными параметрами и пересобирать программу, не вникая в код Шурика. Как я понимаю, так работает ДБ5 Брента Симмонса.
Но мы хотели сделать круче, чтобы ничего не надо было не только пересобирать, но и даже перезапускать. Вот как для меня выглядела подкрутка разных параметров в нашей системе:
- Открываю Ангстрем на телефоне и иду в экран, который хочу подкрутить.
- Открываю файл стилей из Дропбокса Сублайм-текстом на Маке.
- Меняю параметры, которые хочу подкрутить и сохраняю файл.
- Трясу телефоном и сразу вижу, как всё выглядит с новыми параметрами.
То есть прямо запущенное приложение тюнится вживую. Это очень круто.
Бывает ещё другой подход: некоторые на время разработки ставят всякие свои слайдеры в приложение «Настройки», чтобы дизайнер мог их дёргать там. Это выглядит весело, но кажется непродуктивным: нафига всё время переключаться между своей программой и настройкой? Да и скроллить бесконечные списки параметров на экране телефона как-то не особо круто. Или вводить коды цветов на телефонной клавиатуре. В этом плане Сублайм-текст на компьютере, синхронизированном по Дропбоксу с телефоном, работает лучше.
Шурик написал заметку про внутренности системы, там есть куски кода всякие, почитайте.