Подписаться на блог
В Твиттере

Реплики и ссылки на заметки

В Фейсбуке

Ссылки на заметки

Вконтакте

Ссылки на заметки

В Телеграме

Ссылки на заметки

В Тумблере

Заметки целиком

В Же-же

Заметки целиком

По РСС

Заметки целиком

Если что-то из этого не работает, напишите мне: ilyabirman@ilyabirman.ru.

Эмси будущего

В выходные опять немного поигрался с Какао. Научился делать пункты меню, в которых нарисовано то, что я хочу. Получил поверхностное представление об использовании «имплисит анимейшенс» в Кор-анимейшене. Сделал экспериментальный билд Эмси, в котором реализовал пару вещей.

Во-первых, я сделал шрифт мельче. Когда пунктом меню выступал просто текст в виде NSString, он рисовался стандартным шрифтом для пунктов меню. Я думал, что изменить его я смогу только, если буду использовать кустомный вью (сейчас-то я уже думаю, что, наверное, можно было просто NSAttributedString использовать в качестве тайтла). Короче, теперь у меня используется более мелкий шрифт — из стандартных вещей такой применяется, например, в индикаторе уровня заряда батарейки на ноутбуках.

Эмси будущего

Во-вторых, у меня теперь видно, какая часть трека уже проигралась. Я хочу сделать так, чтобы в эту штуку можно было тыкать, чтобы сразу прыгать в нужное место песни. Ещё есть гипотеза, что круче будет показывать, наоборот, сколько осталось до конца. Эта хрень использует Кор-анимейшен и плавненько переезжает в нужное место, если в Айтюнсе перемотать что-нибудь куда-нибудь резко.

Во время паузы вся эта штука красиво зачёрнобеливается.

Кстати, синий градиент — это просто синий прямоугольник высотой в несколько пикселей, которому с помощью Кор-имиджа был сделан вертикальный моушен-блюр ещё на несколько пикселей.

К сожалению, чтобы показывать прогресс мне приходится снова по таймеру каждую секунду спрашивать Айтюнс о ситуации, что заметно грузит процессор. Само по себе время идёт со вполне предсказуемой скоростью, поэтому мне было бы достаточно знать только о моментах, когда пользователь перематывает что-то, а всё остальное время просто пририсовывать раз в секунду по секунде. Но, к сожалению, Айтюнс не уведомляет систему о перемотке, только о паузе, воспроизведении или смене песни. Если у вас есть идеи относительно того, как отлавливать момент перемотки, я был бы очень рад совету — можно было бы реализовать всё намного чище.

Если кому интересно — пишите, пришлю последний билд посмотреть. Он глючит, иногда вдруг перестаёт рисовать синюю фигню, приходится перезапускать.
Подписаться на блог
Поделиться
Отправить
16 комментариев
Стивен Дедал
Интересно, пришли, пожалуйста.
cDima
Выложи в github, если заинтересован в улучшении проекта. Лэйзи веб подтянется.
Дима Кашехлебов
Шли, потестим. :-)
Роман Комаров
А обязательно всё время показывать прогресс? Если плавно отображать его только при наведении курсора (а скрывать по таймеру после отведения), то можно избавиться от постоянных запросов, ну и с перемоткой всё тоже само собой станет не актуальным. Другое дело — тогда нельзя будет посмотреть прогресс без использования мыши/тачпада.
Хотя хороошо бы этот момент настраиваемым сделать. Тогда кто хочет — сможет отключить постоянное отображение прогресса и тем самым экономить ресурсы процессора.
Илья Бирман
А что же делать мне, который хочет и ресурсы экономить, и прогресс всегда видеть? :-)

Но за мысль спасибо.
Mr. Serge
Jestj variant, kotorij mnogije izpoljzujut — pri peremotke, kogda peremotka uze sdelana, postavitj pauzu i opjatj nachatj igratj, kak toljko poluchil dannije. A vo vremja peremotki, jasno delo, prosto risujesh svoj sinij kvadrat.
Рощупкин Олег
Хм. Единственная причина опрашивать каждую секунду — возможность того, что может произойти событие, отличное от проигрывания. Может стоит покопать в сторону слушания событий от определённого приложения?

Вот что-то похожее:
http://www.insanelymac.com/forum/index.php?s=52772…ic=77673&start=0&p=560048&#entry560048
Илья Бирман
Олег, я именно так и делаю всё остальное. Проблема в том, что, как я уже и написал в заметке, Айтюнс не постит сообщения о перемотке в [NSDistributedNotificationCenter defaultCenter], только о паузе, начале воспроизведения или смене песни.
Рощупкин Олег
Тогда предлагаю копать в сторону отлова события активации окна — перемотать в Айтюнс по-другому нельзя, насколько я посмотрел. Или как-то следить за мышью вообще и когда она взаимодействует с Айтюнс — начинать действия. Хотел бы я подсказать более точный адрес — но пока не нашёл ничего нормального. Эпл излишне словоохотливы в своей документации и это иногда начинает напрягать.

Вот, вроде вспоминают про активацию/деактивацию окон.
http://developer.apple.com/DOCUMENTATION/Cocoa/Con…ecture.html#//apple_ref/doc/uid/TP40002974-CH8-SW3
Илья Бирман
В эту сторону я думал копать, но в это покроет лишь часть случае, причём в моём случае — принебрежимо малую: я управляю горячими клавишами, не переключаясь в сам Айтюнс.
Артём Сапегин
Тыкать — это круто, но мне кажется, что пауза нужна чаще, чем перемотка.
Илья Бирман
Да что вы все со своей паузой.

Повесьте её на клавитуру, есть же клавиатура для этого специально у вас.
Вячеслав Ильинский
Хочу опробовать!

А будет возможность прям в меню перейти на следующий трек?

Мне нравится как на турбофильме (я не знаю как там с виндой) но на маке можно трекболом звук регулировать.
Идея что бы можно было ткнуть, и зажав кливишу прокрутить трек, а просто прокрутив трекбол отрегулировать звук.
Артём Сапегин
«Да что вы все со своей паузой».

Да мне оно как бы и не нужно вовсе, не переживайте так из-за паузы :)
Val Petruchek
>я управляю горячими клавишами, не переключаясь в сам Айтюнс.

Получить список горячих клавиш Айтюнса, соответствующих интересующим событиям, можно? И слушать их вместе с Айтюнсом?

Получится три режима: активный (окно Айтюнса активно), горячий (только что нажали горячую клавишу), пассивный. Соответственно опрашивать состояние каждую секунду надо только в активном и после горячего.
Илья Бирман
:-)

Хрен там: у Айтюнсе нет никаких горячих клавиш, управление производится с помощью внешних программ. В моём случае — это Спарк, но этих программ десятки разных.
Val Petruchek
Ага, я ожидал такого ответа (сам я ни разу айтюнса не видел, если что). Ну что ж, идея не прошла.
Анатолий С.
Если цвет полосы показывает текущее состояние «плэй/пауза», то теперь нет необходимости в значке перед песней.
Александр Шпринц
Спасибо за то, что убрали двойной пробел после двоеточия.
Илья Бирман
Это был типоэксперимент (от слова «типографский»), и я, как, судя по всему, и вы, остался им недоволен :-)
Андрей Оконечников
Илья, а можно и мне бету тоже? И это, правду ведь говорят, на GitHub бы уже захостил.
Илья Бирман
Нет никакой беты. Есть сырой-сырой билд, которым даже я уже забил пользоваться, потому, что он через какое-то время перестаёт следить за событиями. Щас пришлю.

Я не знаю, что такое Гитхаб.
Андрей Оконечников
http://github.com/ — там все написано. К примеру, мои репозитории: http://github.com/okonet
Илья Бирман
Слова «опенсорс» и «репозиторий» вызывают у меня дрожь.

Про вас 158 раз написано, что вы started watching. А ещё там какие-то ваши штуки и миллион кнопок вокруг, и ни одна из них не называется Screenshots.

Так зачем мне туда? Я правда не понимаю.

Пользовательский интерфейс
Доступен первый раздел
электронного учебника

Популярное