iOSアプリ開発の逆引き辞典

iPhone/iPadで使えるアプリ開発のTipsをまとめてみました

色とサイズを指定して円が描画されたUIImageオブジェクトを生成する

本記事では、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;
}

実行すると下図のようになります。

f:id:ch3cooh393:20140307184303p:plain

塗りつぶされた円が描画された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;
}

実行すると下図のようになります。

f:id:ch3cooh393:20140307184616p:plain