[Swift]UIImageView.imageにテキストを表示

追記:
UIImageViewもUILabelもUIViewを継承したものだから、
UIViewをベースに作っていけば、わざわざ画像とテキストを合成することなく、シンプルにできるのではと思いました。
いずれ調べ、、、

=====

■やりたかったこと

あるステータス値によって、画像を表示したり、テキスト文を表示したりしたかった。
実際には、画像もテキスト文も動的に変えられるようにした。

■考えた策

  • UIImageViewとUILabelを両方実装し、条件によって、表示・非表示を行う
     →一箇所だけならこれでいいかと思いましたが、ひと画面で10箇所ぐらいあるとめんどうだなと思いやめました。

  • UIImageViewだけ実装し、条件によって、UIImageViewにテキストを合成させて表示を行う
     →今回こちらを試しました。
    UIImageViewからUILabelのような文字の表示するプロパティやメソッドがあるのかなと思いましたが、ちょっと見当たらず。

  • 実装イメージ

    @IBOutlet weak var imageView: UIImageView!
    // 引数statusの値によって、画像を表示するかテキストを表示するかを分ける
    func displayImageOrText(status:Int) {
        imageView.hidden = false
        if (status==0) {
            // status==0の場合は、円の画像は表示しない
            imageView.hidden = true
        } else if (status>=1 && status<=6) {
            // statusが1〜6までの時は、画像を表示
            // サンプルとして、渡すUIImageは固定している
            imageView.image = UIImage(named: "image_hoge")
        } else {
            // 7以上は、数字を表示
            imageView.image = drawText(imageView.image!.size, statusStr: status.description)
        }
    }
    // 画像とテキストを合成して、UIImageView.imageに渡す
    func drawText(drawSize :CGSize, statusStr :String) ->UIImage {
        // 引数は適当な数字
        let font = UIFont.boldSystemFontOfSize(216)
        UIGraphicsBeginImageContext(drawSize);
        let textRect  = CGRectMake(0, drawSize.height/2-128, drawSize.width, drawSize.height)
        let textStyle = NSMutableParagraphStyle.defaultParagraphStyle().mutableCopy() as! NSMutableParagraphStyle
        textStyle.alignment = NSTextAlignment.Center
        let textFontAttributes = [
            NSFontAttributeName: font,
            NSForegroundColorAttributeName: UIColor.blackColor(),
            NSParagraphStyleAttributeName: textStyle
        ]
        statusStr.drawInRect(textRect, withAttributes: textFontAttributes)
        let strImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext()
        return strImage!
    }

参考:

コメント

タイトルとURLをコピーしました