视频自动播放 - ContainerView - 在视图之间切换 - Swift 3
Video autoplayed - ContainerView - Switching between views - 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
}
尝试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);
}
}
至post通知:
NSDictionary* userInfo = @{@"segmentID": @(segmentID)}; //Used to pass Objects to Notification
[[NSNotificationCenter defaultCenter] postNotificationName:@"NOTIFICATIONID" object:self userInfo:userInfo];
禁止你当前的自动播放。当您收到通知时,只需播放您的视频。 Post 仅当您 select 段时通知。
当 shown/hidden 到 play/stop 视频时,您可以使用 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
的 viewDidLoad
方法中,您可以添加观察者:
NotificationCenter.default.addObserver(self, selector: #selector(playVideo), name: "PlayVideo", object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(stopVideo), name: "StopVideo", object: nil)
我有一个 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
}
尝试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);
}
}
至post通知:
NSDictionary* userInfo = @{@"segmentID": @(segmentID)}; //Used to pass Objects to Notification
[[NSNotificationCenter defaultCenter] postNotificationName:@"NOTIFICATIONID" object:self userInfo:userInfo];
禁止你当前的自动播放。当您收到通知时,只需播放您的视频。 Post 仅当您 select 段时通知。
当 shown/hidden 到 play/stop 视频时,您可以使用 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
的 viewDidLoad
方法中,您可以添加观察者:
NotificationCenter.default.addObserver(self, selector: #selector(playVideo), name: "PlayVideo", object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(stopVideo), name: "StopVideo", object: nil)