/R-music

Аналог iTunes с анимациями, кастомным плеером и сохранением плейлиста

Primary LanguageSwift

R-music

Приложение с поиском и прослушиванием музыки из открытого iTunes API и сохранением понравившихся песен у себя в плейлисте.


В этом проекте я использовала:

  • CleanSwift архитектуру
  • UIKit / SwiftUI для разных экранов через UIHostingController
  • Alamofire, SDWebImage, URLImage, AVPlayer
  • UserDefaults для сохранения данных
  • Вёрстку в коде/ storyboard и XIB для кастомных ячеек
  • Анимацию через пересчёт констреинтов
  • Adobe XD для иконок

Главный экран

Приложени из двух экранов, переходы через таббар. Плейлист написан на SwiftUI. Поиск написан на UIKit с использованием Storyboard и XIB.

Первым открывается экран "Playlist" со списком сохраненных из поисковика песен.
При первом запуске приложения он пустой, без сохраненных песен.

Рядом с ним в TabBar расположен экран "Search" с поиском по ключевым словам из iTunes API.
Изначально экран пустой, в нем есть только таббар и поисковая строка.

Поиск идет с задержкой в 0.5 секунд, чтобы не обрабатывать запрос пользователя посимвольно, отнимая на это много трафика, также добавлен ActivityIndicator во время загрузки данных с сервера.

Плеер

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

Анимация и кастомизация плеера

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

Также за всеми элементами в плеере есть imageView, на которую передается картинка с обложки по URL в разрешении 8х8, расстянутая на весь экран, чтобы окрасить его в цвет обложки. Поверх наложен темный BlurEffect.

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

Удаление и сохранение

Добавить песню можно из поисковика, если напротив песни стоит знак "+". При нажатии на эту кнопку, знак "+" пропадет, это означает, что песня добавлена в массив. После нужно перейти в плейлист и обновить его по кнопке "refresh", список обновится и эта песня появится в нем последней.

Удалить песню можно из плейлиста по свайпу влево, после обновить список по кнопке "refresh". Песня удалиться как с экрана, так и из массива с песнями в памяти устройства. При повторном поиске, напротив удаленной песни вновь появится "+" для добавления ее в плейлист.