Skip to content

mayer1a/iOSAppUI

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

VK App

*Неофициальное приложение

cover


Что это за проект?

Привет! Мой проект - это приложение-клиент для социальной сети VK.

В этом приложение ты можешь:

  • Безопасно авторизоваться в свой аккаунт через веб интерфейс
  • Просмотреть своих друзей и их фотографии
  • Увидеть свои группы и найти новые
  • Почитать свою ленту новостей, а возможно и оценить новость
  • Насладиться кастомными анимациями (нажми на фотографию друга или группы)

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


Полные требования к проекту (дополняются)

  • Применить такие коллекции как UITableView/UICollectionView
  • Применить следующие паттерны:
    • Singleton
    • Observable
  • Создать 6ь и более экранов
  • Использовать UITabBarController/UINavigationController для навигации в приложении
  • Использовать KeyChain при помощи SwiftKeychainWrapper для хранения токена, информации владельца аккаунта после авторизации
  • Использовать UserDefaults для хранения малых объемов структурированной мета-информации
  • Реализовать хранение друзей, групп в Realm
  • Использовать кэширование фотографий/видео при помощи собственной сервиса кэширования - обертки над FileManager
  • Использовать сеть и реализовать более 3х сетевых запросов
  • Использовать Decodable модели данных и модели данных Realm
  • Реализовать собственный сервис вычисления измененных индексов в Realm для обновления только измененных ячеек
  • Использовать, допольнительно к основной, глобальную и собственную очереди
  • Использовать протоколы и замыкания для взаимодействия между классами
  • Реализовать интерективную анимацию перелистывания фотогрфий с отслеживанием прогресса
  • Реализовать кастомный поиск по группам в хедере таблицы с собственной анимацией
  • Использовать PromiseKit для загрузки с сервера, парсинга, сохранения групп в Realm и отображения данных в коллекции
  • Реализовать предзагрузку новостей, паггинацию новостей - бесконечная новостная лента
  • Использовать для отображения новости секцию, составляемую из набора ячеек, в зависимости от типа новости
  • Реализовать поддержку светлой и темной системных тем
  • Реализовать получение новых новостей через pull to refresh
  • Реализовать работу с сетью через синглтон сесии
  • Использовать Alamofire и URLSession
  • Использовать Operation для асинхронного получения, парсинга и сохранения в Realm новостей
  • Реализовать кастомные ячейки для друзей, фотографий, групп и новостей
  • Создать собственный контрол для лайков и их количества у фотографий пользователя
  • Реализовать возможность адаптивного расположения фотографий пользователя в зависимости от ориентации интерфейса (количество фотографий в строке)
  • Реализовать обновление коллекций с друзьями, фотографиями друзей и групп при изменении данных в Realm через observer
  • Исползовать Firebase для хранения групп пользователя
  • Сделать кастомные анимации UIView
  • Реализовать астомные анимации переходов между экранами через UINavigationController с использованием аниматора UIViewControllerAnimatedTransitioning
  • Реализовать WebKitViewController для авторизации в VK
  • Реализовать кастомное взаимодействие перехода UIPercentDrivenInteractiveTransition при помощи UIScreenEdgePanGestureRecognizer
  • Реализовать возможность смены/выхода из учетной записи
  • Определить минимальную поддерживаемую версию OS: iOS 15.0
  • Использовать пакетные менеджер CocoaPods
  • Реализовать затемнения фона фотографии при тапе на ней

Концепт

concept

Как видишь, все 5ь экранов отличаются своей простотой и дружелюбностью, всё понятно и ясно.

  • Главный экран - экран друзей, в нем через выбора друга можно перейти в его фотографии.
  • На экране фотографий можно перейти в режим полноэкранного просмотра фотографий.
  • Экран групп отличается кастомным поиском в хедере таблицы с собственной анимацией.
  • Новости - третий экран в таббаре, в нём отображаются новости в разных форматах, в зависимости от типа новости.
  • Опциональный первый экран (если токен авторизации еще не был получен или истек) - стандартная веб авторизации через VK.

Поддержка системных тем

themes

Поддерживаются системные темы, при переходе системы в темный режим, приложение перестраивает цветовую палитру.

Анимации

themes

  1. На экранах друзей и групп можно увидеть пружинную анимацию аватара, если нажать на неё.
  2. Переход на экраны фотографий сопровождаются кастомными анимациями загрузки в виде облака и перехода - выезжающей вью, прикрепленной в правом верхнем углу.
  3. На экране фотографий пользователя при тапе на кнопку лайка можно увидеть прыгающую анимацию с переворотом сердца и изменение его цвета, а также движение label с количеством лайков.
  4. Переход в режим полноэкранного просмотра фотографии происходит увеличеним вью из той ячейки коллекции, на фотографию которой был тап.

themes

  1. При смене фотографии в полноэкранном режиме просмотра жестом влево можно наблюдать анимацию уменьшения текущей фотографии и ее отъезд влево за экран, и выезд справа следующей фотографии. При свайпе вправа, анимация проигрывается наоборот.
  2. При тапе на фотографию в полноэкранном режиме анимированно меняется цвет фона и исчезает navigation bar.
  3. При просмотре фотографии в полноэкранном режиме при смене ориентации интерфейса в горизонтальное положение уменьшается размер изображения.

themes

  1. Если выбрать строку поиска на экране групп, будут анимированы скрытая кнопка, которая выезжает справа, длина textfield уменьшится, а иконка лупы отъедет в левый край хедера таблицы. Если нажать "Отмена", произойдет обратная анимация.
  2. При свайпе сверху на экране новостей анимация pull-to-refresh
  3. При просмотре фотографии в полноэкранном режиме в горизонтальной ориентации интерфейса положение происходит анимация удаления navigation bar и увеличение размера фотографии.

themes

  1. Анимация загрузки при переходе с экрана друзей на экран фотографий выбранного друга в тёмном режиме.
  2. Адаптация цветовой палитры при смене системного режима.

Поддержка и вклад

Если ты хочешь сделать вклад в этот проект, я всегда рад принять твой merge request.

Помощь

Если тебе нужно связаться со мной или получить помощь по проекту, то не стесняйся - пиши на почту и в телеграм


Благодарность

Все иконки в приложении взяты с сайта https://www.flaticon.com

Для получения информации с сайта https://vk.com используется их собственный VK-Api взяты https://dev.vk.com