Yandex Maps для iPhone (YaMap Web)
Мне очень нравится браузер в iPhone. По сути, он дал начало новой эры мобильного интернета, поставив на свое место разнообразные огрызки для уродливых симбианов типа Оперы Мини и иже с ним. Построен он (как и браузер Android, Palm Pre и прочих современных мобильных ОС) на основе webkit, что дает возможность рендерить страницы именно такими, какие они есть, а не так, как это влазит на экранчик финского смартфона (да, я знаю о существовании вебкита для S60, но вы его видели?). Это такая прелюдия, дальше, как обычно, предыстория =)
Однажды почему-то мне захотелось поиметь Яндекс.Карты на своем устройстве. В аппсторе были только Яндекс.Пробки, который хоть вроде как бы и карты одновременно с поиском и ЖПС, но до стандартного приложения гугломепс даже и на цыпочках с палкой в руке не дотягивают. Поэтому я, как полагается, почесал репу и приступил к написанию своих карт с блекджеком, навигацией, избранными метками и шлюхами.
Описание приложения: давайте сперва непосредственно про программку. Лично я считаю, что получилось вполне очень даже. Для установки вам нужно всего лишь открыть ссылку http://mindcollapse.com/files/ymapw/ в Safari на своем яблофоне и следовать инструкциям. После этого на вашем home screen должна появиться иконка YaMap Web, ее и запускаем. Интерфейс карт и все действия аналогичны оригинальным гуглокартам. Щепок для увеличения\уменьшения (пока это делается очень неспешно, я в поисках решения), двойной tap для приближения к определенной точке. Имеется поиск, выбор типа карты, быстрое перемещение к своему местоположению по gps и отображение этих координат на карте флажком. Единственное что - вы можете одновременно тэпнуть 2мя пальцами по экрану для скрытия\отображения меню. Очень удобно, если нужно рассмотреть что-то детально. В настоящий момент приложение умеет не меньше своего оригинального брата от яндекса. Так в чем профит, %username%? Профит в том, что все это client-side, написано и работает на JavaScript, HTML + CSS3, добавляться может любой функционал, какой душа пожелает. А фейлы есть? Есть, без фейлов в наше время никуда, пока что все работает с заметными тормозами, что в принципе не мешает использованию. На 3GS, думаю, должно вообще идеально идти, тестировалось и писалось на 3G. Еще одним фейлом является landscape-режим, мне пока лень его доделывать, поэтому отображается при повороте экрана все смешно, неудобно и непропорционально. Исправлю в ближайшее время. В планах - добавление избранного, прокладки маршрута между 2-мя точками и т.п.
Особенности национальной ебалки: нужно отдать должное js программистам яндекса - код их карт и документация API написаны очень хорошо и на айфоне все запускается без проблем с единственным но: мобильный safari не знает таких действий, как mousedown, mouseup, mousemove, что делает drag-n-drop прокрутку карты невозможной. В официальной документации разработчика web приложений от Apple описывают следующие похожие event-ы: touchstart, touchchange, touchend, которые по сути являются аналогами мышиных событий с одним исключением, это "многопальцевость" - в callback функцию возвращается event с параметром-массивом touches, где каждый элемент является обычным mousevent. В итоге все решилось обычным initMouseEvent - dispatchEvent для контейнера я.карт, то бишь, отлавливаем touchstart, берем из него первый элемент и вызываем c его значениями mousedown . Для safari mobile есть еще 3 необычных типа событий - gesturestart, gestureend, gesturechange, которые вызываются при выполнений стандартных для айфона движений: щипания для зума либо же вращения 2-мя пальцами. На них было успешно навешено увеличение\уменьшение масштаба карты и скрытие меню. Еще одной проблемой являлось то, что dblclick не поддерживался, являясь системным действием для айфона, пришлось эмулировать, расчитывая микротайм между двумя прикосновениями к экрану. Вот собственно и все по особенностям javascript-ов для айфона, все остальное - рутина. Последнюю версию кода можно посмотреть тут. Никакие лицензии своими действиями мы не нарушаем, т.к. карты отображаются именно в веб-приложении и никакие модификации кода не проводились.