Видео воспроизводится автоматически - 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];
Отключить текущую автоигру. И просто воспроизводите видео, когда получаете уведомление. Публиковать уведомления только при выборе сегмента.