Поисковик авибилетов выпустил путеводители по городам: обзор приложения momondo Places

в 15:34, , рубрики: app, iOS, ipad, iphone, Momondo, Momondo Places, Блог компании Momondo, гид, обзор софта, Софт, метки: , , , , ,

Поисковик авиабилетов momondo выпустил линейку приложений-гидов для iOS momondo Places, включающих в себя подробную навигацию по таким городам, как Москва, Нью-Йорк, Амстердам, Барселона, Рим, Рио. Всего на данный момент 12 приложений — двенадцать городов по всему миру. В этом посте мы расскажем о том, как оно работает с точки зрения пользователя — и с точки зрения разработчика.

Поисковик авибилетов выпустил путеводители по городам: обзор приложения momondo Places - 1

Версия для iPhone | Версия для iPad

Приложения отличаются тем, что вся информация хранится прямо в памяти устройства, что делает их независимыми от интернет-соединения. Ценой этого является их вес: например, 77 МБ для Москвы или 103 МБ для Парижа. Впрочем, это не так уж много даже даже для владельцев 16-гиговых смартфонов.

Поисковик авибилетов выпустил путеводители по городам: обзор приложения momondo Places - 2 Поисковик авибилетов выпустил путеводители по городам: обзор приложения momondo Places - 3

В основе приложения — идея тематических подборок мест под одно из шести заданных настроений: Модное, Культурное, Семейное, Местное (для тех, кому лень далеко идти), Романтическое и Социальное, или — если нет наcтроения определяться вообще — «Все настроения».

Поисковик авибилетов выпустил путеводители по городам: обзор приложения momondo Places - 4 Поисковик авибилетов выпустил путеводители по городам: обзор приложения momondo Places - 5
«Каждое место имеет настроение» — девиз momondo Places

За каждым настроением закреплён свой цвет, определяющий цветовую гамму всего приложения.

Свайпом вверх пользователь выбирает настроение, чтобы открыть следующее меню: все места, достопримечательности, шоппинг, рестораны, ночная жизнь и отели.

Забавно, что в нью-йоркской версии momondo Places для романтического настроения нет ничего во вкладке шоппинг – как будто мы не живём в мире, где все чувства давно научились использовать для повышения продаж.

Поисковик авибилетов выпустил путеводители по городам: обзор приложения momondo Places - 6 Поисковик авибилетов выпустил путеводители по городам: обзор приложения momondo Places - 7

Выбрав понравившееся место, пользователю остаётся только отправиться туда, включив навигатор.

Карточка места состоит из фото, краткого описания, карты, адреса и информации о возрастных ограничениях. Разумеется, их можно добавить в избранное или расшарить.

Поисковик авибилетов выпустил путеводители по городам: обзор приложения momondo Places - 8 Поисковик авибилетов выпустил путеводители по городам: обзор приложения momondo Places - 9

Ниже идут списки ближайших мест из оставшихся пяти категорий.

Все места сразу можно вывести на карту, нажав на иконку в правом верхнем углу. Тут все точно также рассортировано по настроению и типу мест.

Поисковик авибилетов выпустил путеводители по городам: обзор приложения momondo Places - 10 Поисковик авибилетов выпустил путеводители по городам: обзор приложения momondo Places - 11

В основном меню — поиск, полеты и отели в Нью-Йорке (ссылка на momondo Flights and Hotels приложение), информация о городе, его районы, добавление новых мест и настройки.

Поисковик авибилетов выпустил путеводители по городам: обзор приложения momondo Places - 12 Поисковик авибилетов выпустил путеводители по городам: обзор приложения momondo Places - 13

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

По заявлению разработчиков в каждом из 12 пока доступных городов они наполнили информацией о как минимум 200 интересных местах, которые собирались при участии местных авторов. К слову, количество мест постоянно увеличивается. Чтобы посмотреть апдейт, нужно зайти в основное меню и найти раздел New places.

Как это устроено

Следующая часть поста будет интересна тем, кто хочет заглянуть «под капот» нашего приложения.

Поисковик авибилетов выпустил путеводители по городам: обзор приложения momondo Places - 14

Главный экран momondo Places с программной стороны состоит из:

  • 6 контейнеров/контроллеров представлений (view controllers), каждый из которых имеет свое предназначение
  • 11 gesture recognizers (в дополнение к тем, которые предоставлены UIScrollView/UITableView)
  • 19 индивидуальных spring-based POP (Facebook) анимаций для таких вещей, как масштабирование, перемещение, исчезание и проявление разных представлений
  • 14 property observers, реагирующие на изменения состояния цветового колеса (движение вверх / вниз)

Поисковик авибилетов выпустил путеводители по городам: обзор приложения momondo Places - 15

При свайпе вверх движение колеса, размер, исчезновение текста на нем, свечение и все остальные действия происходят пропорционально. Конкретные gesture recognizers становятся включены / отключены.

«Нашей команде было интересно создать приложение на Swift и мы решили попробовать написать новую версию Places для iPhone на этом языке полностью, без использования Objective-C.»
— Денис Торбичук, iOS-разработчик momondo

Чтобы синхронизировать колесо со всеми связанными с ним представлениями используется отслеживание зависимостей через наблюдаемые объекты (observables), которые являются объектами, способными уведомлять слушателей при изменении нижележащих значений.

Разработчики используют простой класс для сохранения состояния значений элементов модели, для которых обеспечивается связывание с соответсвующими отображениями в интерфейсе (например прогресс вертикальной прокрутки ведущего Scrollview):

class BookViewControllerInteractionCoordinator {

    //Прогресс вертикальной прокрутки ведущего Scrollview
    //Значения: 0,0 - 1,0
    //0 - означает, что прогресс прокрутки в верхнем положении (0) - колесо будет маленьким
    //1 - означает, что прогресс прокрутки в верхнем положении (200 в настоящее время) - колесо будет большое, как результат
     var colorWheelVerticalProgress = ObservableProperty<Double>(1.0)
  ...
}

Для отслеживания изменений наблюдаемых объектов используется класс ObservableProperty:

/// A mutable property of type T that allows observation of its changes.
public final class ObservableProperty<T> {
    private var sinks = Bag<SinkOf<Event<T>>>()

    /// The current value of the property.
    ///
    /// Setting this to a new value will notify all sinks attached to
    /// `values()`.
    public var value: T {
        didSet {
            dispatch_sync(queue) {
                for sink in self.sinks {
                    sink.put(.Next(Box(self.value)))
                }
            }
        }
    }
    ...

Все контроллеры представлений, которые желают реагировать на изменение значения прогресса прокуртки, осуществляют это с помощью наблюдения за изменениями BookViewControllerInteractionCoordinator. recommendationListVerticalProgress. Например, в следующем случае осуществляется анимация колеса вверх/вниз:

 wheelVerticalScrollObserver = coordinator. colorWheelVerticalProgress.values().start {
            [weak self] progress in
            if let strongSelf = self {
                
                //scroll category bar based on the wheel progress
                let moveAnimation:POPSpringAnimation = strongSelf.categoryHeaderCarouselTopConstraint.pop_animationForKey("moveAnimation") as POPSpringAnimation? ?? {
                    let moveAnimation = POPSpringAnimation.springAnimationWithPropertyName(
                        .LayoutConstraintConstant,
                        bounciness: 3.0,
                        speed: 10.0
                    )
                    strongSelf.categoryHeaderConstraint.pop_addAnimation(moveAnimation, forKey: "moveAnimation")
                    return moveAnimation
                    }()
                
                moveAnimation.toValue = round(interpolate(44, 600, progress)) // small wheel state -> big wheel state

            }
        }

Резюме

В целом приложение работает достаточно стабильно, единственное место где были замечены терпимые лаги – меню поиска. Но с этим жить можно. За все время теста на iPhone 5 не было ни единого вылета или заметных провисаний.

Приятный интерфейс и оригинальная концепция подборок мест делают momondo Places удобным и приятным гидом, а независимость от сети обеспечивает его максимальную практичность и экологичность: меньше лесов будет вырублено ради бумажных путеводителей.

Поисковик авибилетов выпустил путеводители по городам: обзор приложения momondo Places - 16
Этот ленивец очень рад, что его дерево не срубят ради очередной пачки макулатуры

Расскажите, какими приложениями-гидами пользуетесь в поездках вы? И готовы ли вы их поменять на momondo Places?

Автор: mmtourist

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js