リリースしている以下のアプリで,必要となったことから派生して書いた記事になります.
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するなど)を実現できました.
参考になれば幸いです.