MILLEN BOX

音楽好きの元組み込みソフトエンジニアによるプログラミング(主にiOSアプリ開発)の勉強の記録

UIButtonに画像を貼り付ける (ソースコード編 UIViewContentModeで丁度よく) (swift2.0)(UIViewContentMode)(AspectFit)

前回はStoryboardにてボタン画像の貼り付けしましたが、今回はソースコードの貼り付けを行います。
Storyboardも便利ですが、ソースコードの方が明確に目に見えて指定するので、こちらの方が好みの方も多いのではないでしょうか。

f:id:anthrgrnwrld:20151017112133g:plain

Githubは以下です。

github.com

あと以下のページを参考にしています。
▶︎Study Swift: UIButton with an image. Scale: aspect fit.

自分ポイント1

準備として、StoryboardのUIButtonからOutletを.swiftファイルに紐付けしておいて下さい。

自分ポイント2

viewDidLoadあたりでimageをセットします。
セット方法は(ボタンのOutlet).setImage((貼り付ける画像のUIImage)!, forState: (貼り付けたい状態)) です。
forState では、どの状態(ボタンを押している、押していないなど)の時について画像を貼り付けるを指定します。
今回は

  • ボタンを押している時 → .Default
  • ボタンを押していない時 → .Highlighted

で指定します。

        button.setImage(buttonImageDefault!, forState: .Normal)
        button.setImage(buttonImageSelected!, forState: .Highlighted)

自分ポイント3

どのように画像をセットするかを指定します。
指定方法は以下になります。

  • (ボタンのOutlet).imageView?.contentMode = UIViewContentMode.(セット方法の指定)

セット方法の指定について代表的な方法として以下があります。

  • ScaleAspectFit
  • ScaleAspectFill
  • ScaleToFill

今回はボタンの縦横比を変えずにViewからはみ出ないように目一杯広げるので ScaleAspectFit を使用します。
以下にソースコードを貼っておきます。
ScaleAspectFill, _ ScaleToFill_ についてはコメントアウトしています。もしよろしければコメントを外してみて、どのような表示になるのかを確認してみて下さい。

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var button: UIButton!
    
    let buttonImageDefault :UIImage? = UIImage(named:"buttonDefault.png")
    let buttonImageSelected :UIImage? = UIImage(named:"buttonSelected.png")
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        button.setImage(buttonImageDefault!, forState: .Normal)
        button.setImage(buttonImageSelected!, forState: .Highlighted)
        button.imageView?.contentMode = UIViewContentMode.ScaleAspectFit    //Aspect比一定でViewからはみ出さない大きさまで目一杯広げる
        //button.imageView?.contentMode = UIViewContentMode.ScaleAspectFill //Aspect比一定でViewから縦横の一方がはみ出る形で目一杯広げる
        //button.imageView?.contentMode = UIViewContentMode.ScaleToFill     //Aspect比を保たずにViewの大きさまで目一杯広げる

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func pressButton(sender: AnyObject) {
    }

}

「ボタンを押してないんだけど押したことにしたい」なんて時 (例えばこんな時) もありますので、そんな時は今回の方法で画像を差し替えてもよいと思います。
ボタンシリーズはこれにて終了。