xyk blog

最近は iOS 開発の記事が多めです。

UIImage と UILabel を合成する

環境:Swift2.1

UIImage と UILabel を合成する方法について。

  1. UIImage をセットした UIImageView を作成、そしてそれに UILabel を addSubview する。

  2. UIImageView(UIView) が持つ CALayer プロパティのrenderInContextメソッドでグラフィックコンテキストに描画する。

  3. グラフィックコンテキストから描画した画像を取得する。

以下、サンプルコード。UIImage は前回記事colorImageメソッドを使って作成している。

let yellowImage = UIImage.colorImage(color: UIColor.yellowColor(), size: CGSize(width: 100, height: 100))
let yellowImageView = UIImageView(image: yellowImage)

let myLabel = UILabel(frame: CGRect(x: 10, y: 10, width: 80, height: 17))
myLabel.text = "Hello!"
myLabel.backgroundColor = UIColor.greenColor()
myLabel.textAlignment = .Center
yellowImageView.addSubview(myLabel)

UIGraphicsBeginImageContextWithOptions(yellowImageView.frame.size, false, UIScreen.mainScreen().scale)

if let context = UIGraphicsGetCurrentContext() {
    
    yellowImageView.layer.renderInContext(context)
    let newYellowImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    let newYellowImageView = UIImageView(image: newYellowImage)
}

Playground での実行結果

f:id:xyk:20151114182513p:plain