#objective-c #ios #cocoa-touch
#objective-c #iOS #cocoa-touch
Вопрос:
Хотя вопрос звучит просто и на него действительно просто ответить, но я не нашел полного ответа ни в одной книге / форуме / веб-сайте.
Краткий фон моего приложения:
У меня есть зависимый / множественный инструмент выбора пользовательского интерфейса (2 средства выбора пользовательского интерфейса — назовем их P1 и P2), UITEXTVIEW и панель внизу экрана. на панели у меня есть такие кнопки, как «Воспроизведение», «Пауза», «Перемотка» и «Вперед», каждый раз, когда я прокручиваю UIPicker P1, значение p2 выбора изменяется и, соответственно, текст в UITextView.
Мне нужно встроить 700 файлов mp3 в мое приложение (не удивляйтесь идее размещения такого количества файлов в приложении — общий размер всех mp3 составляет 49 Мп, каждый файл занимает 20 секунд и имеет очень низкий битрейт). Я хочу воспроизводить каждый mp3-файл в соответствии со значением в сборщиках.
вот поток -> Я прокручиваю P1 -> Значение в P1 Изменяется -> значение P2 изменяется -> текст в TextView изменяется.
Это похоже на «Главы» в P1 и номер абзаца в P2, а фактический текст абзаца в TextView.
после этого я хочу встроить mp3-файлы так, чтобы при соответствующих диапазонах в сборщиках (P1 и P2) mp3 в «play», «pause», «Rewind» и «Forward» также должны измениться.
Мое требование заключается в следующем:
при изменении значения средства выбора файл mp3, указанный в кнопке «воспроизведение», должен измениться соответствующим образом.
Моя идея соответствует моему требованию:
- Для воспроизведения файлов mp3 я должен поместить их в папку resources и ссылаться на них с помощью NSBundle
- Возможно, мне придется создать NSDictionary Array для ссылки на имена файлов mp3
- Возможно, мне придется создать метод (проверка файлов mp3 на основе значений средств выбора), который будет помещен в раздел rowdidselect UIPicker.
Ребята, пожалуйста, помогите мне в этом. ваши идеи, комментарии, ответы и предложения были бы полезны.
Пожалуйста, внесите свой вклад 🙂
Заранее спасибо 🙂
Ответ №1:
Я бы сказал, что у вас есть разумный подход, который в значительной степени выяснен. Существует несколько способов достижения этой цели, но ваш разумный. Почему бы не попробовать?
Я бы просто предложил один AVPlayer и загружал по одному клипу за раз. Не оставляйте загруженные клипы после загрузки нового клипа. Поскольку вам, похоже, нужно воспроизводить только один файл за раз, подойдет один проигрыватель, который освободит память, когда вы дадите ему новый клип для воспроизведения. Поскольку вы ссылались на iOS, а ваши файлы небольшие, их загрузка должна быть достаточно эффективной.
Комментарии:
1. @Johsua — Большое спасибо за ваши коммнеты :-). Я понял это. итак, вот что я сделал: взял имя обоих средств выбора P1 и P2 (используя didselectrow — скажем, «Глава 1» и «Урок 1»), объединил оба имени (это становится Chapter1Lesson1). сохранил то же имя для моего mp3 (Chapter1Lesson1) для этого значения pikcers и передал это как переменную в «pathForResource» для mp3. поэтому каждый раз, когда я вращаю средство выбора независимо от P1 или P2 или обоих. объединение их имен передается в NSBundle для моего Mp3-файла, который, конечно, присутствует в основном пакете.
2. Такое же хорошее решение, как и любое другое. Вы знаете, что в именах файлов тоже можно использовать пробелы, верно? 🙂 Таким образом, у вас могут быть «Глава 1» и «Урок 1» — это будет выглядеть великолепно и по-прежнему работать. 🙂