CGSize size = CGSizeMake( rect.size.width , rect.size.height );
UIGraphicsBeginImageContextWithOptions(size,NO,0.0);
CGContextRef context = UIGraphicsGetCurrentContext();
CGPoint point = rect.origin;
CGAffineTransform affineMoveLeftTop
= CGAffineTransformMakeTranslation(
-(int)point.x ,
-(int)point.y );
CGContextConcatCTM( context , affineMoveLeftTop );
3)左上にずらしたUIViewのイメージをオフスクリーンに貼付けます。
[(CALayer*)view.layer renderInContext:context];
UIImage *cnvImg = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();
/** UIViewの一部をUIImageとして取得
* @param view 対象のUIImage
* @param rect 切り出したい位置とサイズ
*
* @return 対象のUIImage
*/
-(UIImage *)makeUIImageFromUIView:(UIView *)view
withRect:(CGRect)rect
{
// オフスクリーン(見えない描画領域)を作成
CGSize size = CGSizeMake( rect.size.width , rect.size.height );
UIGraphicsBeginImageContextWithOptions(size,NO,0.0);
// (補足:サイズ , NO:透過有 , 0.0:自動スケール です)
// オフスクリーン(見えない領域)描画よりグラフィックスコンテキスト取得
CGContextRef context = UIGraphicsGetCurrentContext();
// 切り取り開始位置に合わせ
// 左にpoint.x、上にpoint.y移動させるAffine変換を作成します。
CGPoint point = rect.origin;
CGAffineTransform affineMoveLeftTop
= CGAffineTransformMakeTranslation(
-(int)point.x ,
-(int)point.y );
// Affine変換を使用する為、コンテキストに設定
CGContextConcatCTM( context , affineMoveLeftTop );
// Viewの移動返還後のイメージをオフスクリーンに貼付けます。
// (※ オフスクリーンからはみ出た領域は削除されるようです。 )
[(CALayer*)view.layer renderInContext:context];
// オフスクリーンの内容をUIImageとして取り出します。
// (autoreleaseと思います)
UIImage *cnvImg = UIGraphicsGetImageFromCurrentImageContext();
// オフスクリーンを破棄します。
UIGraphicsEndImageContext();
return cnvImg;
}
毎日楽しく刺激的な日々で
こんな環境で仕事ができるチャンスがあることを本当に感謝しています。
このチャンスに甘えない様に
iOSのネイティブ開発とWeb開発の両方をこれからもがんばっていきたいと思います。