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}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。