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

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

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

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

Q&A

解決済

3回答

3331閲覧

removeFromSuperViewの使い方について

kyoppy

総合スコア20

Swift

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

0グッド

0クリップ

投稿2016/11/23 14:17

編集2016/11/24 02:07

ViewController.swift内においてCLEANボタンを押した際にsubviewに追加したLine_Drawを消したいのですが、removefromsuperviewの使い方がいまいちよくわかりません。CLEANボタンはstorybordにて宣言しています。ご回答宜しくお願いします。何か不備がありましたらコメントしていただけると幸いです。
LineDraw、Led_LineDrawはUIviewのクラスです。

/*CLEANボタン押した時の挙動*/ @IBAction func clean_button(sender: AnyObject) { }
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { if point_int != 0 && PartsPainting.flag_paint(0) == 1 && wire_draw_ran == 1 && flag_draw_wire == 1{ let Line_Draw = LineDraw(frame: CGRect(x: 0, y: 0, width:1130, height:891)) Line_Draw.opaque = false Line_Draw.backgroundColor = UIColor.clearColor() Line_Draw.into_bord_point(PartsPainting.wire_get_point_xArray[wire_count], into_start_y: PartsPainting.wire_get_point_yArray[wire_count], into_end_x: PartsPainting.wire_get_point_xArray[wire_count+1], into_end_y: PartsPainting.wire_get_point_yArray[wire_count+1]) wire_count = wire_count+2 self.view.addSubview(Line_Draw) } if point_int != 0 && PartsPainting.flag_paint(1) == 1 && led_draw_ran == 1 && flag_draw_led == 1 { let Led_Draw = Led_LineDraw(frame: CGRect(x: 0, y: 0, width:1130, height:891)) Led_Draw.opaque = false Led_Draw.backgroundColor = UIColor.clearColor() Led_Draw.into_bord_point(PartsPainting.led_get_point_xArray[led_count], into_start_y: PartsPainting.led_get_point_yArray[led_count], into_end_x: PartsPainting.led_get_point_xArray[led_count+1], into_end_y: PartsPainting.led_get_point_yArray[led_count+1]) led_count = led_count+2 self.view.addSubview(Led_Draw) flag_draw_led = 0 } }

LIneDraw,Led_LineDrawはこんな感じで宣言しています。

class LineDraw: UIView { }

touchbeganメソッド外で以下のような画像出力用メソッドを使っています。

private func initImageView_breadbord(){ // UIImage インスタンスの生成 let breadboard:UIImage = UIImage(named:"breadboard.png")! // UIImageView 初期化 let breadboard_imageView = UIImageView(image:breadboard) // UIImageViewの倍率変更 breadboard_imageView.transform = CGAffineTransformMakeScale(1.35, 1.35); // 画像の配置場所を指定 breadboard_imageView.center = CGPoint(x:568, y:520) // UIImageViewのインスタンスをビューに追加 self.view.addSubview(breadboard_imageView) }

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

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

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

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

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

fuzzball

2016/11/24 00:58 編集

Line_Drawの型は何でしょうか?addSubviewしているのは1つだけでしょうか?
fuzzball

2016/11/24 01:28

カスタムクラスではなくUIViewそのものでしょうか?self.viewには、他にaddSubviewしているUIViewはありますか?
kyoppy

2016/11/24 02:07

度々申し訳ありません、情報を追加しましたのでご確認ください。
guest

回答3

0

ベストアンサー

Viewからリムーブする場合は、Viewに乗っているsubviewsを配列として取り出し目当てのクラスを指定するかTag番号をつけてそれを目印に削除するかだと思います。

swift

1// 目当てのクラスを全てリムーブする 2self.view.subviews.forEach { 3 if $0 is LineDraw { 4 $0.removeFromSuperview() 5 } 6} 7 8// タグ番号からリムーブするViewを探す 9self.view.subviews.forEach { 10 if $0.tag == 999 { 11 $0.removeFromSuperview() 12 } 13}

投稿2016/11/24 13:37

編集2016/11/24 21:53
_Kentarou

総合スコア8490

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

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

0

self.viewから全てのLineDrawを剥がします。

swift

1self.view.subviews.reversed().forEach { 2 if type(of: $0) == LineDraw.self { 3 $0.removeFromSuperview() 4 } 5}

動作確認はしていません。

投稿2016/11/24 02:39

fuzzball

総合スコア16731

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

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

0

これでいけませんか?

swift

1 @IBAction func clean_button(sender: AnyObject) { 2 Line_Draw.removeFromSuperview() 3 }

投稿2016/11/23 14:50

fromageblanc

総合スコア2724

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

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

kyoppy

2016/11/23 15:35

Use of unresolved identifier 'Line_Draw'というエラーが表示されます..
fromageblanc

2016/11/23 17:16

Line_DrawはremoveFromSuperviewをおそらく持ってるんですが、clean_button関数から参照できてないようです。参照可能な管理にするのは難しいですか?
kyoppy

2016/11/24 00:35

参照可能にするとは具体的にどうすればよいでしょうか?無知ですいません..
fuzzball

2016/11/24 00:39

Line_DrawをViewControllerクラスのプロパティにすればいいです。
kyoppy

2016/11/24 00:49

Viewを動的に作ったり消したりしたいのでプロパティに追加するのは避けたいのですが、このプロセスは間違いでしょうか?
fuzzball

2016/11/24 00:59

なぜ避けたいのか理由が分からないのですが‥。「情報の追加・修正の依頼をする」に質問を書きましたので回答をお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問