Sono un utente relativamente nuovo e rapido, ora ho bisogno di sfruttare il sensore di prossimità di un iPhone. Non importa la distanza, ma voglio sapere quando qualcosa è vicino all'iPhone.Sensore di prossimità in Swift (da Objective-C)
Quindi ho trovato questo codice in Objective-C che funzionava, ma ne ho bisogno in Swift. Ho provato alcuni modi, ma nessuno ha funzionato. Così qui è il codice che ho bisogno:
- (void) activateProximitySensor {
UIDevice *device = [UIDevice currentDevice];
device.proximityMonitoringEnabled = YES;
if (device.proximityMonitoringEnabled == YES) {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(proximityChanged:) name:@"UIDeviceProximityStateDidChangeNotification" object:device];
}
}
- (void) proximityChanged:(NSNotification *)notification {
UIDevice *device = [notification object];
NSLog(@"Detectat");
//DO WHATEVER I WANT
}
EDIT 1: Quello che ho provato è stato questo:
override func viewDidLoad() {
super.viewDidLoad()
UIDevice.currentDevice().proximityMonitoringEnabled = true;
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector(proximityStateDidChange()), name:UIDeviceProximityStateDidChangeNotification, object: nil);
}
e la funzione:
func proximityStateDidChange() {
//DO WHATEVER I WANT
}
quello che ho messo nella funzione viene eseguito sempre quando l'app viene eseguita.
EDIT 2: Cercando il codice di Eric D. commento
mi genera l'eccezione:
La speranza che qualcuno possa aiutare,
Grazie in anticipo!
mostrare ciò che si è tentato? Forse eri vicino a una soluzione. – Moritz
Sì, modifica la domanda ora! :) –
Per il tuo Edit2: sì, il problema è che tu dichiari 'let sensor = MySensor()' all'interno di 'viewDidLoad', ma non appena' viewDidLoad' termina la sua esecuzione, il tuo 'sensore' viene liberato dalla memoria, e in seguito quando l'osservatore delle notifiche attiva la notifica, non riesce a trovare il tuo oggetto, quindi si blocca. Dovresti dichiarare 'let sensor = MySensor()' al di fuori di 'viewDidLoad', a livello globale o in una classe che puoi raggiungere in qualsiasi momento. – Moritz