Skip to content

Commit 5434278

Browse files
authored
Merge pull request #18 from thisIsTheFoxe/feature/GCView
add `GKGameCenterView` for iOS, tvOS, & macOS
2 parents 8152fa2 + e947458 commit 5434278

File tree

5 files changed

+146
-2
lines changed

5 files changed

+146
-2
lines changed

Examples/GKMatchMaker/iOS/Views/ContentView.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ struct ContentView: View {
3838
Text("Authentication")
3939
}
4040
.buttonStyle(PrimaryButtonStyle())
41+
NavigationLink(destination: GKGameCenterView()) {
42+
Text("Game Center")
43+
}
44+
.buttonStyle(PrimaryButtonStyle())
4145
NavigationLink(destination: MatchMakingView()) {
4246
Text("Match Making")
4347
}

Examples/GKMatchMaker/macOS/Views/Sidebar/SidebarMenu.swift

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,26 +25,28 @@
2525

2626
import Foundation
2727
import SwiftUI
28+
import GameKitUI
2829

2930
enum SidebarMenu: Int, CaseIterable, Identifiable {
3031

3132
var id: Int {
3233
return self.rawValue
3334
}
3435

35-
36-
case authentication, matchMaking
36+
case authentication, gameCenter, matchMaking
3737

3838
var title: String {
3939
switch self {
4040
case .authentication: return "Authentication"
41+
case .gameCenter: return "Game Center"
4142
case .matchMaking: return "Match Making"
4243
}
4344
}
4445

4546
var image: String {
4647
switch self {
4748
case .authentication: return "lock.fill"
49+
case .gameCenter: return "gamecontroller"
4850
case .matchMaking: return "personalhotspot"
4951
}
5052
}
@@ -53,6 +55,7 @@ enum SidebarMenu: Int, CaseIterable, Identifiable {
5355
var contentView: some View {
5456
switch self {
5557
case .authentication: AuthenticationView()
58+
case .gameCenter: GKGameCenterView()
5659
case .matchMaking: MatchMakingView()
5760
}
5861
}

Examples/GKMatchMaker/tvOS/Views/ContentView.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ struct ContentView: View {
2121
NavigationLink(destination: AuthenticationView()) {
2222
Text("Authentication")
2323
}
24+
NavigationLink(destination: GKGameCenterView()) {
25+
Text("Game Center")
26+
}
2427
NavigationLink(destination: MatchMakingView()) {
2528
Text("Match Making")
2629
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
///
2+
/// MIT License
3+
///
4+
/// Copyright (c) 2020 Henrik Storch
5+
///
6+
/// Permission is hereby granted, free of charge, to any person obtaining a copy
7+
/// of this software and associated documentation files (the "Software"), to deal
8+
/// in the Software without restriction, including without limitation the rights
9+
/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10+
/// copies of the Software, and to permit persons to whom the Software is
11+
/// furnished to do so, subject to the following conditions:
12+
///
13+
/// The above copyright notice and this permission notice shall be included in all
14+
/// copies or substantial portions of the Software.
15+
///
16+
/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17+
/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18+
/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19+
/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20+
/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21+
/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22+
/// SOFTWARE.
23+
///
24+
/// Created by Henrik Storch on 02.10.21.
25+
26+
#if os(iOS) || os(tvOS)
27+
28+
import Foundation
29+
import GameKit
30+
import SwiftUI
31+
32+
public struct GKGameCenterView: UIViewControllerRepresentable {
33+
34+
let viewController: GKGameCenterViewController
35+
36+
public init(viewController: GKGameCenterViewController = GKGameCenterViewController()) {
37+
self.viewController = viewController
38+
}
39+
40+
public func makeUIViewController(context: Context) -> GKGameCenterViewController {
41+
let gkVC = viewController
42+
gkVC.gameCenterDelegate = context.coordinator
43+
return gkVC
44+
}
45+
46+
public func updateUIViewController(_ uiViewController: GKGameCenterViewController, context: Context) {
47+
return
48+
}
49+
50+
public func makeCoordinator() -> GKCoordinator {
51+
return GKCoordinator(self)
52+
}
53+
}
54+
55+
public class GKCoordinator: NSObject, GKGameCenterControllerDelegate {
56+
var view: GKGameCenterView
57+
58+
init(_ gkView: GKGameCenterView) {
59+
self.view = gkView
60+
}
61+
62+
public func gameCenterViewControllerDidFinish(_ gameCenterViewController: GKGameCenterViewController) {
63+
gameCenterViewController.dismiss(animated: true, completion: nil)
64+
}
65+
}
66+
67+
#endif
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
///
2+
/// MIT License
3+
///
4+
/// Copyright (c) 2020 Henrik Storch
5+
///
6+
/// Permission is hereby granted, free of charge, to any person obtaining a copy
7+
/// of this software and associated documentation files (the "Software"), to deal
8+
/// in the Software without restriction, including without limitation the rights
9+
/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10+
/// copies of the Software, and to permit persons to whom the Software is
11+
/// furnished to do so, subject to the following conditions:
12+
///
13+
/// The above copyright notice and this permission notice shall be included in all
14+
/// copies or substantial portions of the Software.
15+
///
16+
/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17+
/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18+
/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19+
/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20+
/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21+
/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22+
/// SOFTWARE.
23+
///
24+
/// Created by Henrik Storch on 02.10.21.
25+
26+
#if os(macOS)
27+
28+
import Foundation
29+
import GameKit
30+
import SwiftUI
31+
32+
public struct GKGameCenterView: NSViewControllerRepresentable {
33+
34+
let viewController: GKGameCenterViewController
35+
36+
public init(viewController: GKGameCenterViewController = GKGameCenterViewController()) {
37+
self.viewController = viewController
38+
}
39+
40+
public func makeNSViewController(context: Context) -> GKGameCenterViewController {
41+
let gkVC = viewController
42+
gkVC.gameCenterDelegate = context.coordinator
43+
return gkVC
44+
}
45+
46+
public func updateNSViewController(_ uiViewController: GKGameCenterViewController, context: Context) {
47+
return
48+
}
49+
50+
public func makeCoordinator() -> GKCoordinator {
51+
return GKCoordinator(self)
52+
}
53+
}
54+
55+
public class GKCoordinator: NSObject, GKGameCenterControllerDelegate {
56+
var view: GKGameCenterView
57+
58+
init(_ gkView: GKGameCenterView) {
59+
self.view = gkView
60+
}
61+
62+
public func gameCenterViewControllerDidFinish(_ gameCenterViewController: GKGameCenterViewController) {
63+
gameCenterViewController.dismiss(gameCenterViewController)
64+
}
65+
}
66+
67+
#endif

0 commit comments

Comments
 (0)