22835


お世話になっております。  
現在アプリを開発中ですが、何しろ知識がないため、いろいろなところでつまずいています。  
今回の質問は、下記のコード（同じことを２５回繰り返します）を配列（Arrayなど)を使ってすっきりとさせたいことです。  
一行つづ書いていけば一応完成はするのですが、ビルドして走らせてみると、このページだげ、動きがカクカクしていてスムーズに動きません。  
コードがすっきりすればカクカクもなくなるとおもいます。  
ググッて見てあれこれと試してはいますが、なかなか動いてくれません。  
よろしくお願いします。

> >
[code]

>>     btn2 = UIButton()

>>     btn3 = UIButton()

>>     btn4 = UIButton()

>>     btn5 = UIButton()

>>     btn6 = UIButton()

>>     btn7 = UIButton()

>>     btn8 = UIButton()

>>     btn9 = UIButton()

>>     btn10 = UIButton()

>>     btn11 = UIButton()

>>     btn12 = UIButton()

>>     btn13 = UIButton()

>>     btn14 = UIButton()

>>     btn15 = UIButton()

>>     btn16 = UIButton()

>>     btn17 = UIButton()

>>     btn18 = UIButton()

>>     btn19 = UIButton()

>>     btn20 = UIButton()

>>     btn21 = UIButton()

>>     btn22 = UIButton()

>>     btn23 = UIButton()

>>     btn24 = UIButton()

>>     btn25 = UIButton()

>>  
>>     btn1.frame = CGRectMake(0,0,buttonWidth,buttonHeight)

>>     btn2.frame = CGRectMake(0,0,buttonWidth,buttonHeight)

>>     btn3.frame = CGRectMake(0,0,buttonWidth,buttonHeight)

>>     btn4.frame = CGRectMake(0,0,buttonWidth,buttonHeight)

>>     btn5.frame = CGRectMake(0,0,buttonWidth,buttonHeight)

>>     btn6.frame = CGRectMake(0,0,buttonWidth,buttonHeight)

>>     btn7.frame = CGRectMake(0,0,buttonWidth,buttonHeight)

>>     btn8.frame = CGRectMake(0,0,buttonWidth,buttonHeight)

>>     btn9.frame = CGRectMake(0,0,buttonWidth,buttonHeight)

>>     btn10.frame = CGRectMake(0,0,buttonWidth,buttonHeight)

>>     btn11.frame = CGRectMake(0,0,buttonWidth,buttonHeight)

>>     btn12.frame = CGRectMake(0,0,buttonWidth,buttonHeight)

>>     btn13.frame = CGRectMake(0,0,buttonWidth,buttonHeight)

>>     btn14.frame = CGRectMake(0,0,buttonWidth,buttonHeight)

>>     btn15.frame = CGRectMake(0,0,buttonWidth,buttonHeight)

>>     btn16.frame = CGRectMake(0,0,buttonWidth,buttonHeight)

>>     btn17.frame = CGRectMake(0,0,buttonWidth,buttonHeight)

>>     btn18.frame = CGRectMake(0,0,buttonWidth,buttonHeight)

>>     btn19.frame = CGRectMake(0,0,buttonWidth,buttonHeight)

>>     btn20.frame = CGRectMake(0,0,buttonWidth,buttonHeight)

>>     btn21.frame = CGRectMake(0,0,buttonWidth,buttonHeight)

>>     btn22.frame = CGRectMake(0,0,buttonWidth,buttonHeight)

>>     btn23.frame = CGRectMake(0,0,buttonWidth,buttonHeight)

>>     btn24.frame = CGRectMake(0,0,buttonWidth,buttonHeight)

>>     btn25.frame = CGRectMake(0,0,buttonWidth,buttonHeight)

>>  
>>     btn1.layer.masksToBounds = true

>>     btn2.layer.masksToBounds = true

>>     btn3.layer.masksToBounds = true

>>     btn4.layer.masksToBounds = true

>>     btn5.layer.masksToBounds = true

>>     btn6.layer.masksToBounds = true

>>     btn7.layer.masksToBounds = true

>>     btn8.layer.masksToBounds = true

>>     btn9.layer.masksToBounds = true

>>     btn10.layer.masksToBounds = true

>>     btn11.layer.masksToBounds = true

>>     btn12.layer.masksToBounds = true

>>     btn13.layer.masksToBounds = true

>>     btn14.layer.masksToBounds = true

>>     btn15.layer.masksToBounds = true

>>     btn16.layer.masksToBounds = true

>>     btn17.layer.masksToBounds = true

>>     btn18.layer.masksToBounds = true

>>     btn19.layer.masksToBounds = true

>>     btn20.layer.masksToBounds = true

>>     btn21.layer.masksToBounds = true

>>     btn22.layer.masksToBounds = true

>>     btn23.layer.masksToBounds = true

>>     btn24.layer.masksToBounds = true

>>     btn25.layer.masksToBounds = true

>>     btn1.layer.cornerRadius = 2.0

>>  
>>     btn2.layer.cornerRadius = 2.0

>>     btn3.layer.cornerRadius = 2.0

>>     btn4.layer.cornerRadius = 2.0

>>     btn5.layer.cornerRadius = 2.0

>>     btn6.layer.cornerRadius = 2.0

>>     btn7.layer.cornerRadius = 2.0

>>     btn8.layer.cornerRadius = 2.0

>>     btn9.layer.cornerRadius = 2.0

>>     btn10.layer.cornerRadius = 2.0

>>     btn11.layer.cornerRadius = 2.0

>>     btn12.layer.cornerRadius = 2.0

>>     btn13.layer.cornerRadius = 2.0

>>     btn14.layer.cornerRadius = 2.0

>>     btn15.layer.cornerRadius = 2.0

>>     btn16.layer.cornerRadius = 2.0

>>     btn17.layer.cornerRadius = 2.0

>>     btn18.layer.cornerRadius = 2.0

>>     btn19.layer.cornerRadius = 2.0

>>     btn20.layer.cornerRadius = 2.0

>>     btn21.layer.cornerRadius = 2.0

>>     btn22.layer.cornerRadius = 2.0

>>     btn23.layer.cornerRadius = 2.0

>>     btn24.layer.cornerRadius = 2.0

>>     btn25.layer.cornerRadius = 2.0

>>  
[/code]


CC BY-SA 3.0
2016-03-05T04:14:14.200
22823
2016-03-05T10:56:55.687
13156
question
ios swift xcode
配列を使ってすっきりしたいです。


確かに「配列を使ってすっきり」させたくなるコードではありますが、「コードがすっきりすればカクカクもなくなるとおもいます」に関しては甚だ疑問であると言わざるをえません。ただし、「カクカク」については具体的にどんな事象が発生しているのかさっぱりわかりませんので、この質問スレの主題は「配列を使って」コードを書き直すことに絞らせていただきます。「カクカク」については、改めて(「カクカク」を再現するのに十分な情報を付加した上で)別質問とされた方がいいでしょう。  
また「あれこれと試してはいますが、なかなか動いてくれません。」についても何を試したところどうなったのか、きちんと記載すべきでしょう。失敗事例を人に見てもらって改善点を指摘してもらうのはプログラミング習得のために大変有効なステップの一つです。きちんと失敗例を上げておくことによって、回答者が余計な推測をしたり、失敗例を回答に書いてしまう可能性を低くできます。

さて、あなたの示したコードを単純に配列を使って書き直すと、以下のような感じになります。

[code]

        for _ in 0..<25 {
            let btn = UIButton()
            btn.frame = CGRectMake(0,0,buttonWidth,buttonHeight)
            btn.layer.masksToBounds = true
            btn.layer.cornerRadius = 2.0
            btns.append(btn)
        }
    
[/code]

もちろん`btns`は有効な範囲を持った変数(プロパティ)して、どこかに適切に宣言しておかないといけません。

[code]

        var btns: [UIButton] = []
    
[/code]

これだけだとインスンタンス化したボタンを表示することもできていないので、(推測で)適当に処理を付け足すと例えば次のようになります。

[code]

        let btnSpecs: [(title: String, x: CGFloat, y: CGFloat, tag: Int)] = [
            ("1", 8, 28, 0),
            ("2", 72, 28, 1),
            ("3", 136, 28, 2),
            ("4", 200, 28, 3),
            ("5", 264, 28, 4),
    
            //...(中略)
    
            ("21", 8, 284, 20),
            ("22", 72, 284, 21),
            ("23", 136, 284, 22),
            ("24", 200, 284, 23),
            ("25", 264, 284, 24),
        ]
        for spec in btnSpecs {
            let btn = UIButton()
            btn.frame = CGRectMake(spec.x, spec.y, buttonWidth, buttonHeight)
            btn.layer.masksToBounds = true
            btn.layer.cornerRadius = 2.0
            btn.setTitle(spec.title, forState: .Normal)
            btn.tag = spec.tag
            btn.addTarget(self, action: "buttonPressed:", forControlEvents: .TouchUpInside)
            //...(その他のbtnに対する設定)
            btns.append(btn)
            self.view.addSubview(btn)
        }
    
[/code]

上記のコードでは25個分のボタンのアクション処理を1つのメソッド`buttonPressed(_:)`ですべて実行しようと言う想定になっていますので、その部分をそのまま使うのであれば、そのメソッドも適切なクラス内に定義しておいてください。

以上のような処理をどのタイミングで行うかもレスポンスに大きく影響したりするのですが、とりあえずここまでにしておきます。何かあれば、コメントするなりご質問に追記するなりしてください。


CC BY-SA 3.0
2016-03-05T10:56:55.687
22835
2016-03-05T10:56:55.687
13972
22823
answer