Domanda

In questo momento ho un collo di bottiglia nel mio programma che sto cercando di scrivere. Sto cercando di utilizzare un gesto pizzico per controllare la scala di un UIImage. suo calcolo della scala che causa il programma di rallentare e diventare instabile. sotto è l'equazione.

currentScale = (currentDistance / initialDistance) * scaleMod;

scaleMod è ciò che mai la scala corrente è l'utente ha le dita fuori dallo schermo. così la prossima volta che l'utente fa un pizzico della vecchia scala è essenzialmente il punto di partenza della nuova azione di scala.

È stato utile?

Soluzione

1) Non puoi calcolare scaleMod / initialDistance una volta mentre currentDistance sta cambiando. In questo modo hai solo fare che i tempi di valore currentDistance, che rimuove una divisione.

2) Assicurarsi che questo è in realtà il collo di bottiglia. E 'più probabile è no, a meno che il vostro fare qualcosa di veramente sbagliato.

Altri suggerimenti

Per qualsiasi tipo di tre Vars, questo calcolo può facilmente essere fatto milioni di volte al secondo con poco impatto sulle prestazioni. Il tuo problema è altrove.

Se si fissa lo scaleMod e initialDistance a potenze di 2 si potrebbe usare turni per la moltiplicazione e la divisione più veloce.

qui per riferimento .

È possibile memorizzare scaleMod / initialDistance. Quando scala è attiva (dita dell'utente sono ancora sullo schermo), moltiplicare tale valore per currentDistance se necessario.

Una volta che l'utente ha terminato pizzicare, memorizzare il nuovo valore scaleMod / initialDistance per la prossima volta pizzicare accade.

se si sta facendo il calcolo con int (o altro numero intero), vedere se può farlo utilizzando la precisione float. Floating-punto di divisione è più veloce di numero intero (meno bit per dividere, supponendo che il CPU) ha unità floating-point).

Inoltre, provare a scomporre divisione come moltiplicazione per un reciproco.

Controlla che InitialDistance! = 0 prima! :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top