Эмси будущего
В выходные опять немного поигрался с Какао. Научился делать пункты меню, в которых нарисовано то, что я хочу. Получил поверхностное представление об использовании «имплисит анимейшенс» в Кор-анимейшене. Сделал экспериментальный билд Эмси, в котором реализовал пару вещей.
Во-первых, я сделал шрифт мельче. Когда пунктом меню выступал просто текст в виде NSString, он рисовался стандартным шрифтом для пунктов меню. Я думал, что изменить его я смогу только, если буду использовать кустомный вью (сейчас-то я уже думаю, что, наверное, можно было просто NSAttributedString использовать в качестве тайтла). Короче, теперь у меня используется более мелкий шрифт — из стандартных вещей такой применяется, например, в индикаторе уровня заряда батарейки на ноутбуках.
Во-вторых, у меня теперь видно, какая часть трека уже проигралась. Я хочу сделать так, чтобы в эту штуку можно было тыкать, чтобы сразу прыгать в нужное место песни. Ещё есть гипотеза, что круче будет показывать, наоборот, сколько осталось до конца. Эта хрень использует Кор-анимейшен и плавненько переезжает в нужное место, если в Айтюнсе перемотать что-нибудь куда-нибудь резко.
Во время паузы вся эта штука красиво зачёрнобеливается.
Кстати, синий градиент — это просто синий прямоугольник высотой в несколько пикселей, которому с помощью Кор-имиджа был сделан вертикальный моушен-блюр ещё на несколько пикселей.
К сожалению, чтобы показывать прогресс мне приходится снова по таймеру каждую секунду спрашивать Айтюнс о ситуации, что заметно грузит процессор. Само по себе время идёт со вполне предсказуемой скоростью, поэтому мне было бы достаточно знать только о моментах, когда пользователь перематывает что-то, а всё остальное время просто пририсовывать раз в секунду по секунде. Но, к сожалению, Айтюнс не уведомляет систему о перемотке, только о паузе, воспроизведении или смене песни. Если у вас есть идеи относительно того, как отлавливать момент перемотки, я был бы очень рад совету — можно было бы реализовать всё намного чище.
Если кому интересно — пишите, пришлю последний билд посмотреть. Он глючит, иногда вдруг перестаёт рисовать синюю фигню, приходится перезапускать.
Интересно, пришли, пожалуйста.
Выложи в github, если заинтересован в улучшении проекта. Лэйзи веб подтянется.
Шли, потестим. :-)
А обязательно всё время показывать прогресс? Если плавно отображать его только при наведении курсора (а скрывать по таймеру после отведения), то можно избавиться от постоянных запросов, ну и с перемоткой всё тоже само собой станет не актуальным. Другое дело — тогда нельзя будет посмотреть прогресс без использования мыши/тачпада.
Хотя хороошо бы этот момент настраиваемым сделать. Тогда кто хочет — сможет отключить постоянное отображение прогресса и тем самым экономить ресурсы процессора.
А что же делать мне, который хочет и ресурсы экономить, и прогресс всегда видеть? :-)
Но за мысль спасибо.
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=527721559476edb5dad22dc41fc77e3d&showtopic=77673&start=0&p=560048entry560048
Олег, я именно так и делаю всё остальное. Проблема в том, что, как я уже и написал в заметке, Айтюнс не постит сообщения о перемотке в [NSDistributedNotificationCenter defaultCenter], только о паузе, начале воспроизведения или смене песни.
Тогда предлагаю копать в сторону отлова события активации окна — перемотать в Айтюнс по-другому нельзя, насколько я посмотрел. Или как-то следить за мышью вообще и когда она взаимодействует с Айтюнс — начинать действия. Хотел бы я подсказать более точный адрес — но пока не нашёл ничего нормального. Эпл излишне словоохотливы в своей документации и это иногда начинает напрягать.
Вот, вроде вспоминают про активацию/деактивацию окон.
http://developer.apple.com/DOCUMENTATION/Cocoa/Conceptual/CocoaFundamentals/CoreAppArchitecture/CoreAppArchitecture.html#//apple_ref/doc/uid/TP40002974-CH8-SW3
В эту сторону я думал копать, но в это покроет лишь часть случае, причём в моём случае — принебрежимо малую: я управляю горячими клавишами, не переключаясь в сам Айтюнс.
Тыкать — это круто, но мне кажется, что пауза нужна чаще, чем перемотка.
Да что вы все со своей паузой.
Повесьте её на клавитуру, есть же клавиатура для этого специально у вас.
Хочу опробовать!
А будет возможность прям в меню перейти на следующий трек?
Мне нравится как на турбофильме (я не знаю как там с виндой) но на маке можно трекболом звук регулировать.
Идея что бы можно было ткнуть, и зажав кливишу прокрутить трек, а просто прокрутив трекбол отрегулировать звук.
«Да что вы все со своей паузой».
Да мне оно как бы и не нужно вовсе, не переживайте так из-за паузы :)
Получить список горячих клавиш Айтюнса, соответствующих интересующим событиям, можно? И слушать их вместе с Айтюнсом?
Получится три режима: активный (окно Айтюнса активно), горячий (только что нажали горячую клавишу), пассивный. Соответственно опрашивать состояние каждую секунду надо только в активном и после горячего.
:-)
Хрен там: у Айтюнсе нет никаких горячих клавиш, управление производится с помощью внешних программ. В моём случае — это Спарк, но этих программ десятки разных.
Ага, я ожидал такого ответа (сам я ни разу айтюнса не видел, если что). Ну что ж, идея не прошла.
Если цвет полосы показывает текущее состояние «плэй/пауза», то теперь нет необходимости в значке перед песней.
Спасибо за то, что убрали двойной пробел после двоеточия.
Это был типоэксперимент (от слова «типографский»), и я, как, судя по всему, и вы, остался им недоволен :-)
Илья, а можно и мне бету тоже? И это, правду ведь говорят, на GitHub бы уже захостил.
Нет никакой беты. Есть сырой-сырой билд, которым даже я уже забил пользоваться, потому, что он через какое-то время перестаёт следить за событиями. Щас пришлю.
Я не знаю, что такое Гитхаб.
http://github.com/ — там все написано. К примеру, мои репозитории: http://github.com/okonet
Слова «опенсорс» и «репозиторий» вызывают у меня дрожь.
Про вас 158 раз написано, что вы started watching. А ещё там какие-то ваши штуки и миллион кнопок вокруг, и ни одна из них не называется Screenshots.
Так зачем мне туда? Я правда не понимаю.