Видео воспроизводится автоматически - ContainerView - Переключение между представлениями - Swift 3

У меня есть HMSegmentedControl используется для переключения между сегментами. Я использовал вид контейнера для переключения между этими сегментами, что работает нормально, но на одной из моих вкладок есть видео, которое воспроизводится автоматически viewDidAppear, Так что моя проблема заключается в том, что, поскольку представление контейнера загружает все предыдущие и показывает представления в зависимости isHidden = false мое видео начинает воспроизводиться, даже если этот сегмент не выбран. Как я могу пойти в этой ситуации?

Это мой код на segmentedControlValueChanged событие

print("selected index \(segmentedControl.selectedSegmentIndex)")

    switch segmentedControl.selectedSegmentIndex {
    case 0:
        liveContainer.isHidden = true
    case 1:
        liveContainer.isHidden = true
    case 2:
        liveContainer.isHidden = false
    default:
        break
    }

2 ответа

Решение

Ты можешь использовать NSNotificationCenter отправить уведомление контроллеру представления, содержащему видео, когда оно показано / скрыто для воспроизведения / остановки видео. Это можно сделать в окне выбора сегмента контейнера. Таким образом, вы можете удалить автозапуск из viewDidAppear и добавьте его в метод, вызываемый при отправке уведомления.

Например, в вашем segmentedControlValueChanged событие, вы можете написать:

switch segmentedControl.selectedSegmentIndex {
case 0:
    liveContainer.isHidden = true
    NotificationCenter.default.post(name: Notification.Name("StopVideo"), object: nil)
case 1:
    liveContainer.isHidden = true
    NotificationCenter.default.post(name: Notification.Name("StopVideo"), object: nil)
case 2:
    liveContainer.isHidden = false
    NotificationCenter.default.post(name: Notification.Name("PlayVideo"), object: nil)
default:
    break
}

и в вашем видео ViewControllerВы можете использовать два метода: один для воспроизведения видео:

func playVideo() {
  //play video here
}

и еще один, чтобы остановить его:

func stopVideo() {
  //stop video here
}

и в вашем видео ViewController"s viewDidLoad Метод, вы можете добавить наблюдателей:

NotificationCenter.default.addObserver(self, selector: #selector(playVideo), name: "PlayVideo", object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(stopVideo), name: "StopVideo", object: nil)

Пытаться NSNotificationCenter,

При получении файла:

В -viewDidLoad:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveNotification:) name:@"NOTIFICATIONID" object:nil];

И создать метод для получения уведомления.

-(void)receiveNotification:(NSNotification *) notification{
    if ([notification.name isEqualToString:@"NOTIFICATIONID"])
    {
        NSDictionary* userInfo = notification.userInfo;
        NSNumber* segmentID = (NSNumber*)userInfo[@"segmentID"];
        NSLog (@"Successfully received test notification! %i", segmentID.intValue);
    }
}

Чтобы опубликовать уведомление:

NSDictionary* userInfo = @{@"segmentID": @(segmentID)}; //Used to pass Objects to Notification
[[NSNotificationCenter defaultCenter] postNotificationName:@"NOTIFICATIONID" object:self userInfo:userInfo];

Отключить текущую автоигру. И просто воспроизводите видео, когда получаете уведомление. Публиковать уведомления только при выборе сегмента.

Другие вопросы по тегам