Je travaille sur une application iPad qui a un dessin personnalisé UIView
qui couvre essentiellement tout l'écran. C'est une application audio et il y a des VU-mètres qui reçoivent des messages de mise à jour sur ethernet environ 30 fois par seconde, puis demandent à l'interface utilisateur de redessiner les VU-mètres sur l'écran. Le problème que j'ai est qu'il ya 16 VU mètres à différentes positions dans la vue et je finis par appeler needsDisplayInRect
pour chacun 30 fois par seconde. Si je fais tout le dessin dans la fonction drawRect
alors ça marche, mais c'est assez lent car le CGRect
passé à drawRect
est presque tout l'écran.Gérer des appels multiples/fréquents à UIView nécessite DisplayDisplayInRect efficacement
Dans la version OSX, il y a la fonction NSView
getRectsBeingDrawn
qui m'a permis d'améliorer de manière significative les performances de rafraîchissement. Cependant, autant que je sache, il n'y a pas de fonction équivalente dans iOS.
J'ai essayé le stockage CGRects
que je l'ai appelé alors que les redessiner à drawRect
, mais il se trouve que iOS décide souvent de redessiner les zones entre les CGRects
qui ont eu needsDisplayInRect
leur a demandé, donc je finis avec de gros rectangles blancs sur des zones que je n'ai pas demandé de redessiner (bien que j'obtienne l'amélioration de performance que j'attends). Le problème ici est que je ne peux pas voir un moyen d'obtenir les retraits qui sont en train d'être redessinés, juste le rect passé dans drawRect qui est essentiellement une union de tous les rects étant redessiné.
Alors, y a-t-il un autre moyen d'accélérer les retraits très fréquents de petites zones d'un UIView
que j'ai manqué?