本記事では、UIImageオブジェクトをプログラム(コード)だけで動的に生成する方法を紹介します。
塗りつぶされた円が描画されたUIImageオブジェクトを生成する
塗りつぶされた円を描画するにはCGContextFillEllipseInRect関数
を使用します。
- (UIImage *)imageFillEllipseWithColor:(UIColor *)color size:(CGSize)size { UIImage *image = nil; // ビットマップ形式のグラフィックスコンテキストの生成 UIGraphicsBeginImageContextWithOptions(size, 0.f, 0); // 現在のグラフィックスコンテキストを取得する CGContextRef context = UIGraphicsGetCurrentContext(); // 塗りつぶす領域を決める CGRect rect = CGRectMake(0, 0, size.width, size.height); CGContextSetFillColorWithColor(context, color.CGColor); CGContextFillEllipseInRect(context, rect); // 現在のグラフィックスコンテキストの画像を取得する image = UIGraphicsGetImageFromCurrentImageContext(); // 現在のグラフィックスコンテキストへの編集を終了 // (スタックの先頭から削除する) UIGraphicsEndImageContext(); return image; }
上記で定義したUIImageオブジェクトを返すimageWithFillColor:size:メソッド
を実行します。
- (IBAction)tappedButton:(id)sender { // ImageViewのサイズを取得する CGSize size = self.imageView.frame.size; // 塗りつぶしたい色のUIColorオブジェクトを生成する UIColor *color = [UIColor magentaColor]; // 色とサイズを指定してUIImageオブジェクトを生成する UIImage *image = [self imageWithFillColor:color size:size]; // 生成したUIImageオブジェクトをImageViewに設定する self.imageView.image = image; }
実行すると下図のようになります。
塗りつぶされた円が描画されたUIImageオブジェクトを生成する
(線だけの)円を描画するにはCGContextStrokeEllipseInRect関数
を使用します。
- (UIImage *)imageFillEllipseWithColor:(UIColor *)color size:(CGSize)size { UIImage *image = nil; // ビットマップ形式のグラフィックスコンテキストの生成 UIGraphicsBeginImageContextWithOptions(size, 0.f, 0); // 現在のグラフィックスコンテキストを取得する CGContextRef context = UIGraphicsGetCurrentContext(); // 塗りつぶす領域を決める CGRect rect = CGRectMake(0, 0, size.width, size.height); CGContextSetStrokeColorWithColor(context, color.CGColor); CGContextStrokeEllipseInRect(context, rect); // 現在のグラフィックスコンテキストの画像を取得する image = UIGraphicsGetImageFromCurrentImageContext(); // 現在のグラフィックスコンテキストへの編集を終了 // (スタックの先頭から削除する) UIGraphicsEndImageContext(); return image; }
上記で定義したUIImageオブジェクトを返すimageWithFillColor:size:メソッド
を実行します。
- (IBAction)tappedButton:(id)sender { // ImageViewのサイズを取得する CGSize size = self.imageView.frame.size; // 塗りつぶしたい色のUIColorオブジェクトを生成する UIColor *color = [UIColor magentaColor]; // 色とサイズを指定してUIImageオブジェクトを生成する UIImage *image = [self imageWithFillColor:color size:size]; // 生成したUIImageオブジェクトをImageViewに設定する self.imageView.image = image; }
実行すると下図のようになります。