炊きたてのご飯が食べたい

定時に帰れるっていいね。自宅勤務できるっていいね。子どもと炊きたてのご飯が食べられる。アクトインディでは積極的にエンジニアを募集中です。

Swift2 - 円形( circle )の UIImageView と UIButton の作成


円形の UIImageView や UIButton を利用したくなるケースは多いと思うので、カスタムクラスを利用した方法を紹介したいと思います。この方法では storyboard 上で円形にはならないので注意してください。

UIImageView

UIImageView を継承した CircleImageView を作成する。やっていることは単純で layout の調整を行う layoutSubviews() 内で self.layer.cornerRadius に円の半径となる self.frame.size.width / 2 を設定しているだけです。

class CircleImageView: UIImageView {
    override func layoutSubviews() {
        super.layoutSubviews()
        self.layer.cornerRadius = self.frame.size.width / 2
    }
}

使い方としては円形にしたい imageView に UIImageView ではなく CircleImageView を指定してあげます。 storyboard を利用していて @IBOutlet にも指定しなくてもいい部品に関しては、コードで指定するのと同じように storyboard 上で CircleImageView を指定してあげます。

@IBOutlet weak var imageView: CircleImageView!

UIButton

UIImageView と同じように行けるかと思っていましたが、同じように試したところ画像がひし形のようになってしまい、上手く対応することができませんでした。通常の image ではなく backgroundImage に画像を指定してあげることで、綺麗に円形になることが分かったので、円形の UIButton を利用したくなったら backgroundImage を利用するようにしています。

class CircleButton: UIButton {
    override func layoutSubviews() {
        super.layoutSubviews()
        self.layer.cornerRadius = self.frame.size.width / 2
        // UIButton の場合は clipsToBounds の設定が必要
        self.clipsToBounds = true
    }
}

設定の仕方は UIImageView と同じですが setImage ではなく setBackgroundImage で画像をセットしてあげます。 storyboard の場合も同様に backgroundImage に利用したい画像をセットしてあげます。

@IBOutlet weak var button: CircleButton!
self.button.setBackgroundImage(UIImage(named: "photo"), forState: .Normal)