Voglio usare la proprietà currentPlaybackTime,che restituisce un valore double per attivare una serie di istruzioni if in determinati punti della riproduzione del film per metterlo in pausa. A causa del comportamento approssimativo dei double, non si sincronizza mai con il valore nella mia istruzione if e il film non lo fa " t smettere. Tuttavia, non posso utilizzare un intervallo perché quando riprendo a giocare, potrebbe essere ancora all'interno dell'intervallo e quindi mettere immediatamente in pausa.
Quindi penso che quello che devo fare è arrotondare questo doppio valore a 2 cifre decimali.
Ma come osservo ogni modifica al fileproprietà currentPlaybackTime? In questo momento ho un timer impostato per chiamare il metodo che controlla le mie istruzioni if rispetto al tempo di riproduzione ogni 0,0333 secondi (circa 30 volte al secondo (il framerate dei miei film)). Tuttavia questo è inesatto e mi sento quasi certamente sbagliato.
risposte:
3 per risposta № 1Momento perfetto per il check-out Osservazione di valori-chiave.
2 per risposta № 2
Solo un FYI per gli altri poiché questo è un vecchio thread:
Sfortunatamente currentPlaybackTime
non sembra essere conforme a KVO, quindi il metodo di polling di Ippocrate con un timer è probabilmente la migliore alternativa
1 per risposta № 3
Non sono sicuro a quale proprietà si sta tentando di osservare appartenga, ma deve essere conforme a KVO affinché questo approccio funzioni. Questo non è un dato per ogni proprietà.
Internamente, il codice che ti fornisce currentPlaybackTime
deve chiamare willChangeValueForKey:
e didChangeValueForKey:
(se utilizza KVC per modificare la proprietà, riceve queste chiamate gratuitamente). Vorrei controllare la documentazione (o il codice se è vostro) per assicurarmi che sia osservabile.