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

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

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

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

Q&A

解決済

2回答

847閲覧

swift4 addsubviewしたsliderを消したいのですが、方法がわかりません。

29507-01

総合スコア46

Swift

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

0グッド

0クリップ

投稿2018/09/23 00:51

swift4

1// 2 3import SpriteKit 4import UIKit 5 6class GameScene: SKScene { 7 8func setupButton() { 9 // スライダーの作成 10 let slider = UISlider() 11 //ながさを変更 12 slider.frame.size.width = 100 13 slider.sizeToFit() 14 slider.center = (self.view?.center)! 15 //スライダーの値が変更された時呼び出されるメソッドの設定 16 slider.addTarget(self, action: #selector(self.onChange), for: .valueChanged) 17 //最小値、最大値 18 slider.minimumValue = 10 19 slider.maximumValue = 100 20 //デフォルト値の設定 21 slider.setValue(50.0, animated: true) 22 //色の変更 23 slider.tintColor = UIColor.red 24 slider.layer.position = CGPoint(x: 100, y: self.size.height - 30) 25 self.view?.addSubview(slider) 26}

ゲーム終了時にとsliderを消そうと思うのですが

ネットで探しても見当たりません。
どなたかご教授お願いできないでしょうか ?

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

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

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

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

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

guest

回答2

0

自己解決

func deleteSlider() {
// ここからスライダーにアクセスできるのでスライダーを操作する
let slider = UISlider()
slider.removeFromSuperview()
}
すみません。
初心者なもので、上記記述をしfuncをcallしても結果は同じでした。

ゲームオーバー処理で
for v in (view?.subviews)! {
let v = v as? UISlider
v?.removeFromSuperview()
}
でとりあえず消えました。

投稿2018/09/24 00:06

29507-01

総合スコア46

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

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

0

swift

1mySlider.removeFromSuperview()

で消せますよ。

ただこの場合UISliderの宣言部分はsetupButton関数外にしといた方が楽でしょうね。

投稿2018/09/23 05:44

編集2018/09/23 05:46
xAxis

総合スコア1349

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

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

29507-01

2018/09/23 22:01

mySlider.removeFromSuperview() と記述したのですが、mySliderがないのでエラーになる為 let slider = UISlider() slider.removeFromSuperview() と記述したらエラーは消えたのですが、新たなsliderの定義のようでsliderが消えません。
29507-01

2018/09/23 22:30

classがUIViewControllerではなくSKSceneだから ? ゲーム終了のクラスに記述してみましたが、結果は同じでした。 // self.viewの上に乗っているオブジェクトを順番に取得 for v in (view?.subviews)! { // オブジェクトの型がUIButton型で、タグが5番のオブジェクトを取得 if let v = v as? UIButton, v.tag == 5 { // そのオブジェクトを親のviewから取り除く v.removeFromSuperview() } }
退会済みユーザー

退会済みユーザー

2018/09/23 23:11 編集

横入り失礼します。 xAxisさんの回答にあるように、スコープ内で生成したスライダーをスコープ外から操作しようといているためではないでしょうか? func setupButton() {    let slider = UISlider() // ここなら sliderにアクセスできる } // ここからはsliderにアクセスできない なので // スコープの外で宣言する let slider = UISlider() func setupButton() {   // いろいろごにょごにょ } func deleteSlider() { // ここからスライダーにアクセスできるのでスライダーを操作する } 既に試されているようでしたらご容赦ください。 7:30のコメントについてですが、「結果は同じ」とありますが、取得ができていないのでしょうか? 取得はできるが取り除くことができないのでしょうか? 取得の確認は if let v = ほにゃららのあとに print("v:",v)で出力を見てみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問