在OSX应用程序中,我有一个主类A和一个第二类B.两个都同时运行一个窗口。
在A类中有一个按钮可以在AVPlayerView中播放电影(称为播放器视图)[电影先前加载到PlayerView中!]:
- (IBAction)runMovieN:(id)sender {
[playerView.player play];
}
这完全没问题。单击按钮后立即播放电影。
另一方面,在B类中有一个按钮,它调用A类中的方法......
- (IBAction)runMovie:(id)sender {
ViewController *runMovieButton = [[ViewController alloc] init];
[runMovieButton runMovie];
}
...将在A类中运行此方法:
- (void)playPause {
NSLog(@"A");
[playerView.player play];
}
问题是,日志将完全打印出来,但无论在那里有什么内容,此方法中的任何其他内容都将被忽略。除日志外,括号的内容将被完全忽略。
解决方案可能非常简单,但我无法想出任何可行的解决方案。
答案 0 :(得分:0)
在MainViewController.h中
@interface MainViewController : UIViewController
-(void)playMedia:(NSURL*)url;
@end
在MainViewController.m中
@interface MainViewController ()
@property(nonatomic, retain) AVPlayerLayer *layer;
@property(nonatomic, retain) AVPlayer *player;
@end
@implementation MainViewController
-(void)playMedia:(NSURL*)url{
self.player = [AVPlayer playerWithURL:url];
self.layer = [AVPlayerLayer playerLayerWithPlayer:self.player];
self.player.actionAtItemEnd = AVPlayerActionAtItemEndNone;
self.layer.frame = CGRectMake(0, 0, 200, 200);
[self.view.layer addSublayer: self.layer];
[self.player play];
}
-(IBAction)playButton:(id)sender
{
[self playMedia:[NSURL URLWithString:@"http://content.jwplatform.com/manifests/vM7nH0Kl.m3u8"]];
}
-(IBAction)moveToChild:(id)sender
{
[self.layer.player pause];
[self.layer removeFromSuperlayer];
self.player=nil;
ChildViewController* childView = [[ChildViewController alloc] initWithNibName:@"ChildViewController" bundle:nil];
[self presentViewController:childView animated:YES completion:nil];
}
@end
在你的ChildViewController.h
@interface ChildViewController : MainViewController
@end
在您的ChildViewController.m
中 -(IBAction)playButton:(id)sender{
[self playMedia:[NSURL URLWithString:@"http://srv6.zoeweb.tv:1935/z330-live/stream/playlist.m3u8"]];
}
请注意,如果他们在两个班级中没有父母子女关系,您也可以使用代表在Viewcontrollers之间进行互动