Использование титана NSNotificationCenter с использованием Hyperloop - PullRequest
0 голосов
/ 10 сентября 2018

Я пытаюсь отслеживать UIScreenCapturedDidChangeNotification состояние записи экрана с помощью гиперцикла в моем приложении Titanium. Я пытался какое-то время, но я не смог найти никаких примеров использования NotificationCenter или addObserver в hyperloop. По сути, я безуспешно пытаюсь привести следующий нативный код в hyperloop:

if (@available(iOS 11.0, *)) {
  [[NSNotificationCenter defaultCenter] addObserver:self
                selector:@selector(handleScreenCaptureChange)
   name:UIScreenCapturedDidChangeNotification object:nil];
}

Вот моя попытка, которая не работает:

//Add event listener to monitor screen recording.
var NotificationCenter = require('Foundation/NSNotificationCenter');
var UIScreenMonitor = Hyperloop.defineClass('UIScreenMonitor', 'NSObject');

UIScreenMonitor.addMethod({
    selector : 'handleScreenRecording',
    instance : true,
    arguments : ['NSNotification'],
    callback : function(screen) {
        alert('Screen recording changed: '+UIScreen.mainScreen.isCaptured());
        console.log('Screen recording changed: ',UIScreen.mainScreen.isCaptured(),screen.isCaptured());
    }
});

var screenMonitor = UIScreenMonitor();
NotificationCenter.defaultCenter.addObserverSelectorNameObject(screenMonitor,'handleScreenRecording',UIScreen.UIScreenCapturedDidChangeNotification,null);

1 Ответ

0 голосов
/ 20 декабря 2018

Попробуйте изменить несколько вещей: -

  1. Имя селектора в вашем UIScreenMonitor.addMethod требует двоеточия, например. 'handleScreenRecording:'
  2. Также при вызове функции 'addObserverSelectorNameObject' селектору требуется двоеточие, например. 'handleScreenRecording:'
  3. Добавление ключевого слова 'new' при создании экземпляра класса UIScreenMonitor.
  4. screenMonitor также должен сохраняться в течение необходимого вам периода времени (т. Е. Не локальной переменной), если это не так.

Надеюсь, это сработает.

...