2012-08-02 8 views
4

Je travaille sur un projet iOS, lié au streaming vidéo. L'un des contrôles dans l'interface utilisateur est un MPVolumeView. Le problème est que quand je glisse le contrôle pour le volume de changement, il semble utiliser beaucoup de CPU. Et en fait, l'interface utilisateur devient lente pendant que j'utilise le curseur. Comment peut améliorer la performance ?, peut-être que je fais quelque chose de mal?Comment améliorer les performances de MPVolumeView?

Reference image for CPU Load from Instruments. In the left only streaming, the peaks in the right were streaming+volume slide.

Image de référence pour CPU charge des instruments. Dans la gauche uniquement streaming, les pics dans la droite étaient en streaming + diapositive de volume.

Merci.

EDIT:

Voici comment j'ajoute le contrôle à une vue:

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

« soi » est une vue personnalisée, hérite de UIView, mais je ne suis pas à l'aide et xib drawRect. J'ajoute juste tous les contrôles dans la méthode "initWithFrame: frame".

+0

Afin que nous puissions répondre à votre question, vous devez ajouter quelques informations supplémentaires. En ce moment, il n'y a pas assez de détails inclus pour que quelqu'un puisse faire beaucoup plus que de deviner :) – Dustin

+0

@Dustin j'ai ajouté quelques infos. – LuisEspinoza

+0

Quelle est l'action cible de 'MPVolumeView'? Il y a de fortes chances que le problème réside dans une modification trop fréquente du volume sur une partie sensible du code de lecture multimédia, plutôt que sur l'interface utilisateur elle-même. – LodeRunner

Répondre

0

Observez le nombre de fois que init avec le frame est appelé. Parfois, je l'ai vu appelé plus d'une fois, et parfois souvent, selon la situation. Vous souhaitez probablement uniquement allouer l'affichage du volume lorsque la vue est configurée pour la première fois. Il semble que la configuration du volume puisse être répétée encore et encore.

Un potentiel est de rendre le volume voir une propriété de classe (privée ou publique)

@property (nonatomic, retain) MPVolumeView *mpVolume; 

Alors bien sûr ... @synthesize mpVolume = _mpVolume

Puis, en initWithFrame simplement vérifier et voir si elle est nulle, puis alloc

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

puis relâchez mpVolume dans dealloc

+0

Testé, mais le problème persiste .. – LuisEspinoza

+0

Ok ...: -/Une autre idée est que cette vue vérifie les appareils airplay et affiche le bouton airplay s'il est présent. Avez-vous essayé de faire les mêmes tests CPU en mode avion? Je sais que l'utilisation du mode avion n'est pas une solution, mais cela vous aiderait à savoir si c'est un problème d'airplay –

+0

Testé, mais le problème persiste .., il semble que ce soit mieux, mais pas assez – LuisEspinoza

Questions connexes