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

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

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

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

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

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

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

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

Если кому интересно — пишите, пришлю последний билд посмотреть. Он глючит, иногда вдруг перестаёт рисовать синюю фигню, приходится перезапускать.

Дальше
16 комментариев
Стивен Дедал 2009

Интересно, пришли, пожалуйста.

cDima 2009

Выложи в github, если заинтересован в улучшении проекта. Лэйзи веб подтянется.

Дима Кашехлебов 2009

Шли, потестим. :-)

Роман Комаров 2009

А обязательно всё время показывать прогресс? Если плавно отображать его только при наведении курсора (а скрывать по таймеру после отведения), то можно избавиться от постоянных запросов, ну и с перемоткой всё тоже само собой станет не актуальным. Другое дело — тогда нельзя будет посмотреть прогресс без использования мыши/тачпада.
Хотя хороошо бы этот момент настраиваемым сделать. Тогда кто хочет — сможет отключить постоянное отображение прогресса и тем самым экономить ресурсы процессора.

Илья Бирман 2009

А что же делать мне, который хочет и ресурсы экономить, и прогресс всегда видеть? :-)

Но за мысль спасибо.

Mr. Serge 2009

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.

Рощупкин Олег 2009

Хм. Единственная причина опрашивать каждую секунду — возможность того, что может произойти событие, отличное от проигрывания. Может стоит покопать в сторону слушания событий от определённого приложения?

Вот что-то похожее:
http://www.insanelymac.com/forum/index.php?s=527721559476edb5dad22dc41fc77e3d&showtopic=77673&start=0&p=560048&#entry560048

Илья Бирман 2009

Олег, я именно так и делаю всё остальное. Проблема в том, что, как я уже и написал в заметке, Айтюнс не постит сообщения о перемотке в [NSDistributedNotificationCenter defaultCenter], только о паузе, начале воспроизведения или смене песни.

Рощупкин Олег 2009

Тогда предлагаю копать в сторону отлова события активации окна — перемотать в Айтюнс по-другому нельзя, насколько я посмотрел. Или как-то следить за мышью вообще и когда она взаимодействует с Айтюнс — начинать действия. Хотел бы я подсказать более точный адрес — но пока не нашёл ничего нормального. Эпл излишне словоохотливы в своей документации и это иногда начинает напрягать.

Вот, вроде вспоминают про активацию/деактивацию окон.
http://developer.apple.com/DOCUMENTATION/Cocoa/Conceptual/CocoaFundamentals/CoreAppArchitecture/CoreAppArchitecture.html#//apple_ref/doc/uid/TP40002974-CH8-SW3

Илья Бирман 2009

В эту сторону я думал копать, но в это покроет лишь часть случае, причём в моём случае — принебрежимо малую: я управляю горячими клавишами, не переключаясь в сам Айтюнс.

Артём Сапегин 2009

Тыкать — это круто, но мне кажется, что пауза нужна чаще, чем перемотка.

Илья Бирман 2009

Да что вы все со своей паузой.

Повесьте её на клавитуру, есть же клавиатура для этого специально у вас.

Вячеслав Ильинский 2009

Хочу опробовать!

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

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

Артём Сапегин 2009

«Да что вы все со своей паузой».

Да мне оно как бы и не нужно вовсе, не переживайте так из-за паузы :)

Val Petruchek 2009

я управляю горячими клавишами, не переключаясь в сам Айтюнс.

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

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

Илья Бирман 2009

:-)

Хрен там: у Айтюнсе нет никаких горячих клавиш, управление производится с помощью внешних программ. В моём случае — это Спарк, но этих программ десятки разных.

Val Petruchek 2009

Ага, я ожидал такого ответа (сам я ни разу айтюнса не видел, если что). Ну что ж, идея не прошла.

Анатолий С. 2009

Если цвет полосы показывает текущее состояние «плэй/пауза», то теперь нет необходимости в значке перед песней.

Александр Шпринц 2009

Спасибо за то, что убрали двойной пробел после двоеточия.

Илья Бирман 2009

Это был типоэксперимент (от слова «типографский»), и я, как, судя по всему, и вы, остался им недоволен :-)

Андрей Оконечников 2009

Илья, а можно и мне бету тоже? И это, правду ведь говорят, на GitHub бы уже захостил.

Илья Бирман 2009

Нет никакой беты. Есть сырой-сырой билд, которым даже я уже забил пользоваться, потому, что он через какое-то время перестаёт следить за событиями. Щас пришлю.

Я не знаю, что такое Гитхаб.

Андрей Оконечников 2009

http://github.com/ — там все написано. К примеру, мои репозитории: http://github.com/okonet

Илья Бирман 2009

Слова «опенсорс» и «репозиторий» вызывают у меня дрожь.

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

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

Мои книги