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

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

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

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

Q&A

解決済

1回答

4721閲覧

UISwitchのサイズを変更したい

hodoru3sei

総合スコア284

Swift

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

0グッド

0クリップ

投稿2018/09/29 14:57

わからないことが多すぎてかなり投げやりな質問になってしまいます、すみません。

実現したいこと

実現したいことは、iosデバイスによってUISwitchのサイズを変更して、敷き詰めたいと思っています。
絵に表すと下記のような図を表現したいと思っています。うまくかけなくてわかりずらかったらすみません
実現したいことはあぷりgipadになった際も画面サイズに合わせてUISwitchの大きさを適切に変更をして,
同じ数だけ隙間なく配置したいと考えています。
ボタン

調べてみたこと

UISwitchを任意のサイズで使いたいという僕の実現したいことと一致する記事があったので試してみました。
URLにあるように自分の独自のUISwitchのクラスを作成しました。
記事の中ではStoryBordを使っていましたが、コードでループさせてSwitchを作りたいと思ったので、
@IBInspectable はつけていないです。

Swift

1import UIKit 2 3class CustomSwitch: UISwitch { 4 5 override func awakeFromNib() { 6 super.awakeFromNib() 7 let dispSize:CGSize = CGSize(width: 20, height: 10) 8 let scaleX: CGFloat = dispSize.width / self.bounds.size.width 9 let scaleY: CGFloat = dispSize.height / self.bounds.size.height 10 self.transform = CGAffineTransform(scaleX: scaleX, y: scaleY) 11 } 12}

ViewControllerでこのクラスを使って実現できているか確認してみたのですが、大きさが変更されていませんでした。

比較のために普通のSwitchも配置しています。

Swift

1mport UIKit 2 3class ViewController: UIViewController { 4 var myButton:CustomSwitch! 5 var defaultButton:UISwitch! 6 override func viewDidLoad() { 7 super.viewDidLoad() 8 // Do any additional setup after loading the view, typically from a nib. 9 myButton = CustomSwitch() 10 myButton.layer.position = CGPoint(x: self.view.frame.width/2, y: self.view.frame.height/2) 11 self.view.addSubview(myButton) 12 13 defaultButton = UISwitch() 14 defaultButton.layer.position = CGPoint(x: self.view.frame.width/2, y: self.view.frame.height/3) 15 self.view.addSubview(defaultButton) 16 } 17 18 19}

イメージ説明

このように同じサイズのボタンが表示されてしまいました。
どうしたら任意の大きさのUISwitchを作成することができるのでしょうか?

awakeFromNib()についても調べてみたのですが、認識が曖昧で、ここに書くのが正解なのかもわかりません。調べた限りではViewができあがった際に呼ばれるもの?みたいなのですが、UIがもう出来上がってしまっているので、終わった後にサイズを指定しているから適応されていないのではないかと考えたのですが、わかりませんでした。

他に参考になりそうなサイトを見つけることができなかったのでここに質問を投げてみました。

丸投げな質問になってしまい申し訳ないですが、わかる方いらっしゃいましたらどうすれば実現できるのか教えていただきたいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

awakeFromNib()は、Storyboardに配置した部品を読み込んだ時に呼ばれるメソッドです。Storyboardに配置せず、コードでUISwitchのインスタンスを作った場合はawakeFromNib()は呼ばれません。
自分が作ったコードがうまく動作しない時は、そもそもその処理が呼び出されているかどうか、printを入れる等して自分が作った処理の動作状況を細かく確認することをお勧めします。
今回やりたいことのポイントは、UISwitchにtransformを設定してUISwitchを拡大表示するだけなので、ViewControllerのviewDidLoadに次のような処理を書くだけで実現できると思います。

swift

1 for i in 0 ..< 10 { 2 let dispSize:CGSize = CGSize(width: 80, height: 50) 3 let uiswitch = UISwitch() 4 let scaleX: CGFloat = dispSize.width / uiswitch.bounds.size.width 5 let scaleY: CGFloat = dispSize.height / uiswitch.bounds.size.height 6 uiswitch.transform = CGAffineTransform(scaleX: scaleX, y: scaleY) 7 uiswitch.layer.position = CGPoint(x: view.bounds.size.width/2, y: CGFloat(50 + i*50)) 8 view.addSubview(uiswitch) 9 } 10

投稿2018/09/29 15:41

TakeOne

総合スコア6299

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問