在 SKScene 上展示 viewController
Posted
技术标签:
【中文标题】在 SKScene 上展示 viewController【英文标题】:Presenting a viewController on SKScene 【发布时间】:2014-01-13 10:46:34 【问题描述】:我试图在 SkView
上显示 UIActivityViewController
,但 xcode 给了我这个错误:
“GameOver”没有可见的@interface 声明选择器 'presentViewController:animated:completion:'
- (void)shareScore
//add view
UIView *Sview = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 512, 512)];
UIImageView *image = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"shareScoreImg.png"]];
image.frame = Sview.frame;
[Sview addSubview:image];
//add label
CGRect fframe = self.view.frame;
UILabel *score = [[UILabel alloc] initWithFrame:fframe];
score.text = @"9999";
score.textAlignment = NSTextAlignmentCenter;
score.textColor = [UIColor darkGrayColor];
score.center = CGPointMake(250, 440);
score.font = [UIFont fontWithName:@"Pixel LCD7" size:50];
[Sview addSubview:score];
//capture view
UIGraphicsBeginImageContextWithOptions(Sview.bounds.size, Sview.opaque, 0.0);
[Sview.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * screenshot = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIActivityViewController* activityViewController =
[[UIActivityViewController alloc] initWithActivityItems:@[screenshot]
applicationActivities:nil];
[self presentViewController:activityViewController animated:YES completion:nil];
如何在 SKScene 上呈现预设的 viewController? 谢谢。
【问题讨论】:
你不能,UIView
或任何其他视图没有presentViewController: animated:completion:
的方法。该方法仅适用于UIViewController
@rckoenes 那么我怎样才能将游戏的分数分享到 Facebook 等...?!!!!
通过 ViewController 或窗口。
@rckoenes 我的意思是在游戏中!!!这是SKScene
您不想在游戏过程中显示分享分数按钮,是吗?使用不同的 ViewController 为 Game Over 屏幕创建不同的视图
【参考方案1】:
我们可以使用“presentModalViewController”来访问根视图控制器
UIViewController *vc = self.view.window.rootViewController;
[vc presentViewController: activityViewController animated: YES completion:nil];
现在可以正常使用了!
【讨论】:
大声笑,你基本上已经使用了我的答案。 并非如此。因为你没有放任何代码。 Mc.Lover 放了一个代码。比起你的,我更喜欢他的回答。哈哈? 这就是答案! @Paul 这仅在窗口的 rootViewController 是包含 skscene 的 uiviewcontroller 时才有效。如果您使用导航控制器或其他东西会发生什么?那么这将不起作用。 事实上,这可能是我不会使用的一种方式。太不灵活了。使用委托或通知会更有意义。甚至只是为了从场景中返回对 uiviewcontroller 的引用。其中任何一个都会比这更好。【参考方案2】:IIRC 您创建的第一个 SKScene
位于 SKView
内。
此SKView
在UIViewController
内。
您可以使用属性或委托或任何您喜欢的方法通过SKView
从SKScene
访问UIViewController
上的方法。甚至使用通知。
然后在UIViewController
上,您可以毫无问题地展示新的视图控制器。
【讨论】:
@Mc.Lover 看起来你正试图从SKView
呈现你仍然无法做到这一点。您需要从UIViewController
提交。
@Paul 答案不一定需要代码。这里的解决方案是如何从 skscene 呈现 ViewController 的概念。有很多方法可以做到这一点。提供代码只会涵盖其中一种方式,因此实际上是一个更糟糕的答案。正如您从答案被接受的事实中看到的那样,OP 在这里找到了足够的信息来解决他的问题。以上是关于在 SKScene 上展示 viewController的主要内容,如果未能解决你的问题,请参考以下文章
touches* 事件 - SKScene 与 ViewController
在 ViewController 中播放时从 SKScene 静音 AVAudioPlayer