LoginSignup
18
14

More than 5 years have passed since last update.

[Swift] UIImageを自前で生成し,UIImageViewで表示する方法

Last updated at Posted at 2015-01-18

リリースしている以下のアプリで,必要となったことから派生して書いた記事になります.
i切り絵メーカー for iPad 〜iKirie Maker for iPad〜
https://itunes.apple.com/us/app/i-qieri-huimeka-for-ipad-ikirie/id955247230?mt=8

やりたいこと

UIImageViewに表示するimageは,あらかじめ用意されたimageではなく,動的に生成したUIImageにしたい

このことを実現するための方法です.

自前でUIImageを生成し,UIImageViewで表示する

UIImageは,一般的にあらかじめプロジェクトに導入しているimageファイル(pngやjpgなど)を用いることが多いようです.

例えば,Fusapiensさんの記事から引用すれば,

let myImage = UIImage(named: "logo.png")

などという風に.
これをObjective-Cで同様の内容を書き直すと,以下のようになります.

UIImage *myImage = [UIImage imageNamed:@"logo.png"];

ここまでは普通の話です.
では,目的である,自前でUIImageを生成する方法はどのようにすればよいのでしょうか.

ここでは例として,RGBAで指定した色で四角形のUIImageを生成するとします.
なお,実際にはUIViewを継承したクラスで実装しましたが,UIViewControllerを継承したクラスで例を作成しています.
適時読み替えていただくようお願い致します.

var imgView:UIImageView! = nil
var img:UIImage! = nil
// ここでRGBAの値を指定(今回は適当に青色にしています)
var r:Int = 0
var g:Int = 0
var b:Int = 255
var alphaValue:Float = 1.0

// UIImageViewを準備(iPadの横向きにフルで取ったとした場合.ご自身の要件に合わせて下さい.)
imgView = UIImageView(frame:CGRectMake(0,0,1024,768)
// imgViewを画面に貼り付け
self.view.addSubview(imgView)

// UIImageを自前で準備
UIGraphicsBeginImageContextWithOptions(imgView.frame.size, false, 0)
// context生成
var contextImg:CGContextRef = UIGraphicsGetCurrentContext()
// この塗りつぶす領域の大きさを指定
let rect:CGRect = CGRectMake(0, 0, 1024, 768)
// 色をRGBAで指定
CGContextSetRGBFillColor(contextImg,CGFloat(r) / 255,CGFloat(g) / 255,CGFloat(b) / 255,alphaValue)
// 指定された領域を塗りつぶす
CGContextFillRect(contextImg, rect)
// 現在のcontextの情報取得
img = UIGraphicsGetImageFromCurrentImageContext()
// contextを終了
UIGraphicsEndImageContext()

// imgをUIImageViewで表示
imgView.image = img
imgView.image?.drawInRect(CGRectMake(0, 0, imgView.frame.size.width, imgView.frame.size.height))

このように準備して,そのimageViewの上にやりたい処理(線をdrawするなど)を実現できました.
参考になれば幸いです.

18
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
14