Как можно улучшить производительность MPVolumeView?

Я работаю над проектом iOS, связанным с потоковой передачей видео. Одним из элементов управления в пользовательском интерфейсе является MPVolumeView. Проблема в том, что, когда я сдвигаю ручку для изменения громкости, кажется, что он использует большую часть ЦП. И на самом деле пользовательский интерфейс становится медленным, когда я использую ползунок. Как можно улучшить производительность? Может я что-то не так делаю?

Контрольное изображение для загрузки ЦП от инструментов. В левой только потоковой передаче, пики справа были в потоковом режиме + слайд громкости.

Эталонное изображение для загрузки ЦП от инструментов. Слева только стриминг, справа пики стриминг + слайд громкости.

Спасибо.

РЕДАКТИРОВАТЬ:

Вот как я добавляю элемент управления в представление:

MPVolumeView *mpVolume = [[MPVolumeView alloc] initWithFrame:CGRectMake(32,
                                                                        56,
                                                                        160,
                                                                        9)];
[self addSubview:mpVolume];
[mpVolume release];

«self» - это настраиваемое представление, унаследованное от UIView, но я не использую xib и drawRect. Я просто добавляю все элементы управления в метод "initWithFrame: frame".


person LuisEspinoza    schedule 02.08.2012    source источник
comment
Чтобы мы могли ответить на ваш вопрос, вам необходимо добавить дополнительную информацию. Прямо сейчас здесь недостаточно деталей, чтобы кто-то мог сделать больше, чем догадываться :)   -  person Dustin    schedule 02.08.2012
comment
Каково целевое действие вашего MPVolumeView? Есть большая вероятность, что проблема заключается в слишком частом изменении громкости в чувствительной части кода воспроизведения мультимедиа, а не в самом пользовательском интерфейсе.   -  person LodeRunner    schedule 02.08.2012
comment
Привет, @LodeRunner, я не использую целевое действие MPVolumeView. Я впервые использую это представление, и я использую его так просто, как объясняет документ Apple.   -  person LuisEspinoza    schedule 02.08.2012


Ответы (1)


Посмотрите, сколько раз вызывается init с кадром. Иногда я видел, как его вызывали более одного раза, а иногда и часто, в зависимости от ситуации. Вероятно, вы захотите выделить только объемное представление при первой настройке представления. Похоже, он может настраивать объемный просмотр снова и снова.

Один из возможных вариантов - сделать объемное представление свойством класса (частным или общедоступным).

 @property (nonatomic, retain) MPVolumeView *mpVolume;

Тогда конечно ... @synthesize mpVolume = _mpVolume

Затем в initWithFrame просто проверьте и посмотрите, есть ли он ноль, а затем выделите

 if(_mpVolume == nil){
      _mpVolume = [[MPVolumeView alloc] initWithFrame:CGRectMake(32,56,160,9)];
      [self addSubview:_mpVolume];
 }

Затем отпустите mpVolume в dealloc

person Eric Welander    schedule 02.08.2012
comment
Хорошо ...: - / Еще одна идея заключается в том, что view проверяет наличие устройств трансляции и отображает кнопку трансляции, если она там есть. Вы пробовали проводить те же тесты процессора в авиарежиме? Я знаю, что использование режима полета не является решением, но это поможет вам узнать, проблема ли это с трансляцией - person Eric Welander; 02.08.2012
comment
Протестировал, но проблема не исчезла .. вроде бы лучше, но мало - person LuisEspinoza; 02.08.2012