質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
SpriteKit

SpriteKitは、iOSやOS Xで使用できるApple社製の2Dゲーム開発フレームワークです。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1388閲覧

ViewController から SKScene への値渡しができない

Hkr-Y

総合スコア96

SpriteKit

SpriteKitは、iOSやOS Xで使用できるApple社製の2Dゲーム開発フレームワークです。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2021/11/13 13:03

swift初学者です。
様々なところで調べたのですが、それでも問題を解決することができず質問した次第です。
私のコードの改善点、修正点をご教授いただけると幸いです。
宜しくお願いします。

やりたいこと
StartUpViewControllerで写真を取得し、GameViewControllerの下位にあるSKSceneのnodeのimageNamedに値を渡したい

うまくいってないところ
func func dataDidSelect(data: UIImage) が呼ばれていない
受取側をProtocolに準拠させることができていない

参考サイト
[Swift] Protocolを使ったdelegateで値の受け渡しをする
UIImageに設定されているリソースの名前について


以下コード

swift

1//StartUpViewController.swift 2 3class StartUpViewController: UIViewController { 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 } 8 9 @IBOutlet weak var imageView: UIImageView! { 10 didSet { 11 imageView.image = UIImage(named: "no_image") 12 } 13 } 14 15 @IBAction func imageSetButton(_ sender: UIButton) { 16 17 if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) { 18 19 let pickerView = UIImagePickerController() 20 pickerView.sourceType = .photoLibrary 21 pickerView.delegate = self 22 23 self.present(pickerView, animated: true) 24 } 25 } 26 27 @IBAction func toGameViewButton(_ sender: UIButton) { 28 let storyboard = self.storyboard! 29 let next = storyboard.instantiateViewController(withIdentifier: "toGameView") as! GameViewController 30 next.data = imageView.image 31 self.present(next, animated: true) 32 } 33} 34

swift

1//GameViewController.swift 2 3class GameViewController: UIViewController { 4 weak var delegate: ToPassData? 5 var data: UIImage? 6 7 override func viewDidLoad() { 8 super.viewDidLoad() 9 10 if let view = self.view as! SKView? { 11 if let scene = SKScene(fileNamed: "GameScene") { 12 delegate?.dataDidSelect(data: data!) 13 14 scene.scaleMode = .aspectFill 15 view.presentScene(scene) 16 } 17 } 18 } 19}

swift

1//toPassData.swift 2 3protocol ToPassData: GameScene { 4 func dataDidSelect(data: UIImage) 5}

swift

1//GameScene.swift 2 3class GameScene: SKScene { 4 var imageData: UIImage? 5 var testNode: SKSpriteNode! 6 7 override func didMove(to view: SKView) { 8 self.scaleMode = .aspectFill 9 10 imageData?.accessibilityIdentifier = "testName" 11 12 self.testNode = SKSpriteNode(imageNamed: "testName") 13 self.testNode.scale(to: CGSize(width: 150, height: 150)) 14 self.testNode.position = CGPoint(x: 0, y: frame.height / 4) 15 addChild(self.testNode) 16 } 17}

swift

1extension StartUpViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate { 2 3 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { 4 let image = info[.originalImage] as! UIImage 5 imageView.image = image 6 self.dismiss(animated: true) 7 } 8} 9 10extension GameScene: ToPassData { 11 func dataDidSelect(data: UIImage) { 12 imageData = data 13 print("~~~~~~~~~~~~~~~~~~~~~~~~~~~") 14 } 15}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

他の質問で解決したのでそちらを参照してください。

投稿2022/01/24 00:44

Hkr-Y

総合スコア96

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問