Ich bin ein relativ neuer Benutzer zu schnell und jetzt muss ich den Näherungssensor eines iPhone nutzen. Die Entfernung spielt keine Rolle, aber ich möchte wissen, wann sich etwas in der Nähe des iPhone befindet.Näherungssensor in Swift (von Objective-C)
So fand ich diesen Code in Objective-C, der funktionierte, aber ich brauche es in Swift. Ich habe einige Wege ausprobiert, aber alle haben funktioniert. So, hier ist der Code, ich brauche:
- (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: Was habe ich versucht, war dies:
override func viewDidLoad() {
super.viewDidLoad()
UIDevice.currentDevice().proximityMonitoringEnabled = true;
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector(proximityStateDidChange()), name:UIDeviceProximityStateDidChangeNotification, object: nil);
}
und die Funktion:
func proximityStateDidChange() {
//DO WHATEVER I WANT
}
Was ich in der Funktion setzen Es wird immer ausgeführt, wenn die App ausgeführt wird.
EDIT 2: Der Versuch, den Code von Eric D. Kommentar
wirft mich die Ausnahme:
Hoffnung jemand helfen kann,
Vielen Dank im Voraus!
Zeigen Sie, was Sie versucht? Vielleicht warst du einer Lösung nahe. – Moritz
Ja, ich bearbeite die Frage jetzt! :) –
Für deine Edit2: yeah, das Problem ist, dass du 'let sensor = MySensor()' in 'viewDidLoad' deklarierst, aber sobald' viewDidLoad' die Ausführung beendet, wird dein 'Sensor' vom Speicher und später befreit Wenn der Benachrichtigungsbeobachter die Benachrichtigung auslöst, kann er Ihr Objekt nicht finden und stürzt ab. Sie sollten 'let sensor = MySensor()' außerhalb von 'viewDidLoad' deklarieren, entweder global oder in einer Klasse, die Sie jederzeit erreichen können. – Moritz