Обнаружение нажатия кнопки «Домой» Apple TV и преобразование в тип UIPress, чтобы получить текущее время AVPlayer

Короче говоря, я ищу реализацию метода tapped из https://developer.apple.com/library/content/documentation/General/Conceptual/AppleTV_PG/DetectingButtonPressesandGestures.html

В деталях:

Я разрабатываю приложение tvOS с использованием Objective-C. Когда я использую AVPlayer для воспроизведения видео, я хочу записать текущее время проигрывателя, когда пользователь нажимает кнопку «Домой».

        // Play the stream
        player = [[AVPlayer alloc] initWithURL: [NSURL URLWithString: url]];
        AVPlayerViewController *pvc = [[AVPlayerViewController alloc] init];
        pvc.player = player;

        self.player = player;
        self.playerViewController = pvc;

        UITapGestureRecognizer *tapGestureRec = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)];
        tapGestureRec.allowedPressTypes = @[@(UIPressTypeMenu), @(UIPressTypeSelect)];
        [self.playerViewController.view addGestureRecognizer:tapGestureRec];

Здесь я получаю нажатие, захваченное описанным ниже методом, но не знаю, как проверить нажатие домашней кнопки с пульта.

-(void) постучал: (UIGestureRecognizer *) отправитель {

//реализация ?

}

Я пробовал ниже реализацию, но она падает:

-(void) постучал: (UIGestureRecognizer *) отправитель {

    UIPress *press = (UIPress *)sender;

    if(press.type == UIPressTypeMenu) {
        // Do what you want
        // ...
        cmTime = CMTimeMakeWithSeconds(CMTimeGetSeconds(self.player.currentTime), self.player.currentTime.timescale);
    } else {
        NSLog(@"%ld", (long)press.type);
    }

}

Ошибка: 2017-03-08 09:45:35.991 XXXXX[63556:3612942] -[тип UITapGestureRecognizer]: нераспознанный селектор отправлен экземпляру 0x6080001bddc0 08-03-2017 09:45:35.997 XXXXX[63556:3612942] *** Завершение приложение из-за необработанного исключения «NSInvalidArgumentException», причина: «-[тип UITapGestureRecognizer]: нераспознанный селектор отправлен экземпляру 0x6080001bddc0»

Я впервые использую пульт Apple TV, поэтому мне нужна ваша помощь. Другой пост не мог мне помочь.


person Naren    schedule 08.03.2017    source источник


Ответы (1)


«Кнопка «Домой» — это кнопка, помеченная как телевизор, и она обрабатывается tvOS, ее невозможно использовать для пользовательских жестов.

Это даже не часть определения UIPressType.

public enum UIPressType : Int {
    case UpArrow
    case DownArrow
    case LeftArrow
    case RightArrow
    case Select
    case Menu
    case PlayPause
}

С другой стороны, ваш код фактически создает жест для кнопок меню и выбора.

Сбой происходит из-за этого фрагмента кода:

UIPress *press = (UIPress *)sender;
if(press.type == UIPressTypeMenu) {

Который приводит экземпляр UIGestureRecognizer к UIPress, что является совершенно другим. Он падает при попытке вызвать метод UIPress, потому что на самом деле это другой класс.

Если вы хотите выполнять разные действия для каждого распознавателя жестов, вам следует рассмотреть возможность использования двух разных распознавателей жестов вместо того, чтобы пытаться определить фактическое нажатие, которое вызвало действие, из одного.

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];


    UITapGestureRecognizer *menuGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(menuKeyWasPressed)];
    menuGestureRecognizer.allowedPressTypes = @[@(UIPressTypeMenu)];
    [self.view addGestureRecognizer:menuGestureRecognizer];


    UITapGestureRecognizer *selectGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(selectKeyWasPressed)];
    selectGestureRecognizer.allowedPressTypes = @[@(UIPressTypeSelect)];
    [self.view addGestureRecognizer:selectGestureRecognizer];
}

-(void)menuKeyWasPressed {
    NSLog(@"Menu key was pressed");
}

-(void)selectKeyWasPressed {
    NSLog(@"Select key was pressed");
}

@end
person David Cordero    schedule 24.03.2017
comment
Это помогает. Спасибо. Я обязательно попробую это. - person Naren; 29.03.2017