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

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

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

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

Q&A

解決済

1回答

1511閲覧

SKSceneの背景をグラデーションさせたい。

Ponkiti27

総合スコア9

Swift

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

0グッド

0クリップ

投稿2018/08/08 07:03

主題の通り、SKSceanの背景の色をグラデーションさせたいです。
CAGradientLayer()を使いグラデーションのレイヤを作成し、viewのレイヤを変えることを試してみたのですが、どうやってもその方法だとSKScean内のオブジェクトが塗り潰されてしまいます。
一応、グラデーションの写真をjpgなどで作成しSpriteNodeを使うことで実現はできそうなのですが、
できれば、コードで作成したグラデーションをそのまま使い、背景をグラデーションに変えたいです。
いい方法を知っている方、よろしくお願いします。

下のコードは現状のSKSceanが塗り潰されてしまうコードです。

swift

1import UIKit 2import GameplayKit 3import SpriteKit 4import AVFoundation 5 6class stage05ViewController: UIViewController,AVAudioPlayerDelegate{ 7 var bgmplayer:AVAudioPlayer! 8 //画面幅 9 let w = UIScreen.main.bounds.size.width 10 //画面高さ 11 let h = UIScreen.main.bounds.size.height 12 //ステージ幅 13 let stagew = 4 14 //ステージ高さ 15 let stageh = 4 16 17 override func viewDidLoad() { 18 super.viewDidLoad() 19 let ws = w * CGFloat(stagew) 20 let hs = h * CGFloat(stageh) 21 let wd = -CGFloat(stagew - 1) * w / 2 22 let hd = -CGFloat(stageh - 1) * h / 2 23 24 //ステージBGMの設定 25 do{ 26 let audioPath = Bundle.main.path(forResource: "SKY", ofType: "mp3") 27 let bgmurl = URL(fileURLWithPath: audioPath!) 28 bgmplayer = try AVAudioPlayer(contentsOf: bgmurl) 29 }catch{ 30 print("error") 31 } 32 bgmplayer.play() 33 34 //Viewの作成 35 let sv = SKView(frame: CGRect(x: wd , y: hd , width: ws, height: hs)) 36 37 //グラデーションの作成 38 let gradL = CAGradientLayer() 39 gradL.frame = CGRect(x:0, y:0, width: ws, height: hs) 40 let color1 = UIColor(red: 1.0, green: 1.0, blue: 1.0, alpha: 1).cgColor 41 let color2 = UIColor(red: 120/256.0, green: 150/256.0, blue: 256/256.0, alpha: 1).cgColor 42 gradL.colors = [color1,color2] 43 gradL.startPoint = CGPoint.init(x: 0.5, y: 0) 44 gradL.endPoint = CGPoint.init(x: 0.5 , y: 1 ) 45 46 //Sceneの作成 47 let ss = stage05(size: sv.frame.size) 48 sv.presentScene(ss) 49 50 //Viewのレイヤをグラデーションに変更 51 ss.view?.layer.insertSublayer(gradL, at: 0) 52 53 view.addSubview(sv) 54 55 //バックボタンの作成 56 let backButton = UIButton(frame: CGRect(x: 0,y: 0,width: w / 5,height:w / 10)) 57 backButton.setTitle("back", for: .normal) 58 backButton.backgroundColor = UIColor.black 59 backButton.addTarget(self, action: #selector(stage05ViewController.back(_:)), for: .touchUpInside) 60 view.addSubview(backButton) 61 } 62 63 override func didReceiveMemoryWarning() { 64 super.didReceiveMemoryWarning() 65 // Dispose of any resources that can be recreated. 66 } 67 68 @objc func back(_ sender: UIButton) { 69 self.dismiss(animated: false, completion: nil) 70 } 71}

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

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

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

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

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

fuzzball

2018/08/08 08:25

作ったグラデをUIImage経由でSKTextureにするのではダメ?
guest

回答1

0

ベストアンサー

下にすりゃいいのかな?

swift

1//Sceneの作成 2let ss = stage05(size: sv.frame.size) 3sv.presentScene(ss) 4 5//背景用View 6let bgView = UIView(frame: gradL.bounds) 7bgView.layer.insertSublayer(gradL, at: 0) 8 9//背景が下になるようにadd 10self.view.addSubView(bgView) 11self.view.addSubview(sv)

※動作未確認です

投稿2018/08/08 08:41

fuzzball

総合スコア16731

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

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

Ponkiti27

2018/08/08 09:03

回答ありがとうございます。 実は背景用のビューを作って下に配置することは一回試したことがあったのですけど、 その場合は背景が黒く(何も背景が設定していない時に表示されるやつ)表示されるだけで、 グラデーション が表示されませんでした。 今回書いてくださったコードも試してみたのですが同様の結果でした。 すいません、色々試したことも書いておくべきでした。
fuzzball

2018/08/08 09:06

Sceneの背景は透明にしてます?
Ponkiti27

2018/08/08 13:17

Sceneは透明にしてないです。 透明にする必要があるんですか? Sceneの背景はどうやったら透明にできますか?
fuzzball

2018/08/09 00:23

グラデを下に敷いたんだから、透明にしないと見えませんよね? 質問のコード(ViewController側)でやるなら、 ss.backgroundColor = .clear sv.backgroundColor = .clear でいいかと。
Ponkiti27

2018/08/09 06:20

何度もありがとうございます。 そうですよね、透明にしないと見えないですよね(^_^;) 背景を透明にしたら、ちゃんとグラデーションが表示されました。 本当に助かりました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問