Клиент социальной сети "ВКонтакте"
Получить навыки разработки iOS-приложений и работы с основными инструментами.
- Получить навыки построения интерфейса при помощи Storyboard и Xib, а также кодом и при помощи SnapKit
- Познакомиться с основными видами ViewController'ов
- Познакомиться с основыми элементами построения пользовательского интерфейса
- Получить навыки работы с переходами между ViewController'ами
- Получить навыки работы с сетью при помощи Alamofire
- Получить навыки работы с документацией к API
- Познакомиться со средством для сохранения данных на устройстве Realm
- Получить навыки построения кастомных View
- Получить навыки реализации базовой бизнес логики
- Получить навыки навыков работы с CocoaPods
- Получить навыки навыков работы с Git
- Авторизация в социальной сети "ВКонтакте"
- Получение данных с помощью API ВКонтакте
- Сохранение списка друзей, групп в памяти устройства
- Загрузка и кеширование изображений
- Локализация на русский и английский языки
- Кастомная анимация перехода между экранами
- Отображение ленты новостей пользователя
- Отображение превью историй пользователя
- Возможность "лайкнуть" пост
- Получение свежих новостей с помощью pull-to-refresh
- Prefetching новостей при пролистывании ленты
- Отображение друзей пользователя
- Отображение статуса онлайн у друзей и пользователя
- Поиск друзей
- Галерея фотографий друзей
- Просмотр фотографий друзей с помощью свайпов
- Отображение сообществ пользователя
- Поиск сообществ
- Отображение информации о сообществе
- Отображение ленты сообщества
- Возможность вступить/покинуть сообщество
- Отображение профиля друга
- Отображение профиля пользователя
Экран авторизации является WebView, на котором пользователь входит в аккаунт. После успешного ввода данных приложение получает токен и id пользователя. В дальнейшем при всех запросах используется токен пользователя.
После авторизации пользователь попадает на экран с новостями и происходит запрос к API, а затем ответ парсится. На данном экране выводятся превью историй, поле "Что нового?" и новостная лента. Новостная лента включает в себя фотографию и имя автора, дату публикации, текст новости, изображения (если оно имеется), количество лайков, комментариев, репостов. Пользователя может нажать на кнопку "Мне нравится" и иконка анимировано заполнится и станет красного цвета.
Данный экран является UITableViewController, на котором отображен список друзей пользователя и строка поиска. Поиск происходит по фамилии друзей. Список друзей разделен на секции по первой букве фамилии. Навигация по секциям может осуществляться с помощью контрола. При нажатии на ячейку друга выполняется переход на экран с фотографиями выбранного друга. Фотографии кешируются и список друзей друзей сохраняется на устройстве при помощи Realm.
Галерея представляет собой UICollectionViewController с кастомных layout, ячейки которого заполнены всеми фотографиями пользователя.
На данном экране пользователь может просматривать фотографии своего друга с помощью свайпов. Также пользователь может скрыть экран свайпом вниз.
На данном экране отображаются сообщества, в которых состоит пользователь. Также доступна строка поиска при помощи которой пользователь может искать иные сообщества.
На данном экране отображается состоит ли пользователь в сообществе, количество подписчиков и новостная лента. Реализован растягивающийся хедер при свайпе сверху-вниз. Также доступна возможность вступить/покинуть сообщество. При попытке покинуть сообщество появляется UIAlertController с actionSheet для дополнительной проверки намерения пользователя. После вступления/покидания сообщества появляется кастомный алерт, сообщающий об успешности действия.
Реализован статус онлайн для друзей как с мобильного устройства, так и ПК.
При вступлении/выходе из сообщества отображается данный алерт, сообщающий об успешности действия. Также с помощью UIBezierPath реализованы иконки "Галочка" и "Крестик", появление которых анимировано при помощи CAShapeLayer и CABasicAnimation.
C помощью CAShapeLayer был реализован кастомный ActivityIndicator, у которого можно запустить/остановить анимацию вращения. Данный индикатор используется при авторизации и на экране с новостями вместо стандартного UIActivityIndicator.
Также реализован метод, с помощью которого при pull действии на экране новостей индикатор заполнется в зависимости от того насколько сильно пользователь потянул. Данный механизм сделан по подобию оригинально приложения "ВКонтакте".
Реализован растягивающийся хедер сообщества, который при пролистывании сообщества закрывается фоном NavigationBar. На светлой теме при пролистывании меняется цвет кнопки "Назад" на синий, так как на белом фоне её становится не видно.
При создании данного проекта использовались следующие инструменты :
- UIKit
- UITableViewController/UITableView - экран с новостями, друзья, сообщества.
- UITableViewPrefetch - предварительная загрузка старых новостей.
- UICollectionViewController/UICollectionView - экран с галереей фотографий пользователя.
- UITabbar
- UINavigationController
- UISearchBar - поиск друзей и сообществ.
- UIImageView
- CALayer и CAShapeLayer - кастомный ActivityIndicator, тени вьюшек.
- UILabel
- UIGestureRecognizer - пролистывание фотографий, dismiss экранов.
- CoreAnimation
- CocoaPods
- Alamofire - a HTTP networking library.
- Realm - a mobile database that runs directly inside phones, tablets or wearables.
- Kingfisher - a library for downloading and caching images from the web.
- SnapKit - a DSL to make Auto Layout easy.