2014-04-30 21 views
10

Possiedo uno strumento di rilevamento iPad iPad come applicazione aziendale interna. Evito il blocco dello schermo con l'impostazione [[UIApplication sharedApplication] setIdleTimerDisabled: YES]; allo didFinishLaunchingWithOptions del delegato dell'applicazione.iOS: idleTimerDisabled = SÌ funziona solo fino all'utilizzo di ImagePicker

Ciò funziona correttamente finché non utilizzo lo imagePicker per acquisire un'immagine. Dopodiché, lo idleTimer viene nuovamente attivato. Ho provato a disabilitarlo dopo che è stata scattata l'immagine, ma non funziona.

Here Ho trovato il suggerimento che l'impostazione delle funzionalità del dispositivo richieste in info.plist potrebbe aiutare. Ma finora non lo ha fatto. Ho appena aggiunto tutte le bandiere specifiche per telecamera.

Qualche idea?

Grazie mille!

Marcus

+0

Hai provato portando l'idleTimerDisabled dopo l'imagePicker - il che significa attivare e disattivare seguendo la imagePicker? (vs setIdleTimerDisabled: YES.) – TomSwift

+0

Ciao Tom, sì, l'ho fatto. –

+1

Dove e come si ** setIdleTimerDisabled: NO **? Dove e come si ** setIdleTimerDisabled: YES ** dopo che imagePicker è stato eliminato. Potrebbe essere utile fornire codice. – Ricky

risposta

9

ero in grado di ripristinare l'UIApplication idleTimerDisabled in questo modo:

- (void)resetIdleTimerDisabled 
{ 
    [[UIApplication sharedApplication] setIdleTimerDisabled:YES]; 
} 

#pragma mark - UIImagePickerControllerDelegate 

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    [self dismissViewControllerAnimated:YES completion:^{ 
     [self performSelector:@selector(resetIdleTimerDisabled) withObject:nil afterDelay:1.0]; 
    }]; 
} 

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker 
{ 
    [self dismissViewControllerAnimated:YES completion:^{ 
     [self performSelector:@selector(resetIdleTimerDisabled) withObject:nil afterDelay:1.0]; 
    }]; 
} 

Quello che ho il sospetto sta accadendo è che internamente UIImagePickerController set UIApplication.idleTimerDisabled a YES per mantenere la fotocamera di dormire. Al termine (dopo che i metodi delegati sono stati richiamati e apparentemente anche dopo l'esecuzione del blocco di completamento dell'animazione), lo UIImagePickerController imposta. Invece, dovrebbe farlo solo se il valore era precedentemente NO.

Ho archiviato un bug report con Apple. Vedere il progetto di esempio UIImageViewControllerBug.

1

La soluzione di Jamie sembra buona! Non sono un grande fan dei metodi afterDelay: :)

Il problema è nel framework PhotoLibrary: disattiva il idleTimer prima di avviare il flusso di anteprima dalla fotocamera e lo abilita di nuovo quando lo abbatte a prescindere dal valore precedente.

se si sente più avventure e vogliono una soluzione che funziona in tutta l'applicazione, qui è uno che coinvolge swizzling: https://gist.github.com/zats/1a4aece697075478b44a

testato per entrambi i casi, quando idleTimer disabilitata o abilitata prima di mostrare un'immagine picker. La mia soluzione non osserva idleTimerDisabled mentre viene presentato il selettore di immagini.

P.S. lo stesso problema si verifica quando si utilizza funzionalità di dettatura (bug nel UIDictationController) (@jamie-mcdaniel se sarebbe così gentile da aggiornare il bug report)

+1

Ho aggiornato il mio rapporto sui bug per includere UIDictationController. rdar: // 16940667 –