Sto cercando un modo per disegnare un grafico a linee con un sacco di punti (fino a 10.000) in modo efficiente su iOS. Il grafico ottiene dati in tempo reale e deve essere aggiornato più volte al secondo. Sto cercando di capire un modo per disegnare il grafico in modo efficiente in modo che non massima la CPU e bloccare il thread principale durante il disegno.Disegno grafico con molti punti in modo efficiente su iOS
Attualmente sto creando un UIBezierPath
per il grafico a linee, in un thread in background, aggiungendo tutti i punti e disegnandolo in un CALayer (che ha il disegno asincrono abilitato). Non è molto veloce, supera la CPU e il disegno è così lento che l'interfaccia utente diventa lenta. Sto tracciando dati in tempo reale e, in teoria, potrei riutilizzare lo stesso UIBezierPath
ogni volta e aggiungere i nuovi punti, tuttavia i valori più vecchi vengono scartati dopo un po ', il che significa che i punti per i valori eliminati dovrebbero essere rimossi dal percorso di Bezier , che non è possibile.
Non ho trovato nulla sull'ottimizzazione di set di dati di grandi dimensioni su iOS, ma spero che ci siano modi per utilizzare la GPU per aumentare le prestazioni.
devi disegnare tutti i 10 punti? Anche su uno schermo dell'iPad, sembra eccessivamente eccessivo ... (più punti dei pixel orizzontali). Hai preso in considerazione la mediazione dei dati in un set più piccolo? – Hamish
@ originaluser2 Sono totalmente d'accordo. Sto facendo un po 'di lavoro con i clienti e non sono ancora riuscito a discuterli dall'idea di disegnare questi molti punti. – JonasG
beh se sei in grado di convincerli, fare la media è la soluzione migliore! Dubito che sarai in grado di sfruttare gran parte della GPU senza entrare completamente in Metal/Open GL. Sono abbastanza sicuro che 'UIBezierPath' utilizza principalmente la grafica core sotto il cofano e che tutto gira sulla CPU. – Hamish