画像を拡大・縮小して表示するにはどうするのでしょうか。
CGRectMake
CGAffineTransformMakeScale
を使う方法について見てみましょう。
Xcode 9.3.1
CGRectMake
画像の拡大縮小はUIImageViewのframeサイズをCGRectMakeを使って拡大縮小して画像を変更する方法とCGAffineTransformMakeScale を使うやり方があります。
UIImageViewの基本的な設定からの続きとして、同じように画像を「Add Files to …」としてプロジェクトに追加していきます。
https://i-app-tec.com/objective-c/uiimageview-oc.html
CGRectMake
画像の 幅、高さ を取得してそれにスケールファクターを掛け合わせることにより拡大と縮小ができます。
CGRectは位置とサイズの両方を管理するクラス、CGRectMake の引数として開始位置 x,y と幅と高さを設定します。
1 2 3 4 |
CGRect CGRectMake (CGFloat x, CGFloat y, CGFloat width, CGFloat height); |
実際のサンプルコード
ViewController.m
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
#import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // 背景色の設定 UIColor *customColor = [UIColor colorWithRed:1.0 green:0.9 blue:1.0 alpha:1.0]; self.view.backgroundColor = customColor; //UIImage作成 UIImage *image =[UIImage imageNamed:@"sample@2x.jpg"]; // 画像の幅 CGFloat width = image.size.width; // 画像の高さ CGFloat height = image.size.height; // 拡大・縮小率 CGFloat scale = 0.5f; //UIImageView作成 UIImageView *imageView =[[UIImageView alloc]initWithImage:image]; // 画像サイズ変更 CGRect rect = CGRectMake(0, 0, width*scale, height*scale); // ImageView frame をCGRectMakeで作った矩形に合わせる imageView.frame = rect; // 画像が画面中央にくるように位置合わせ CGFloat pWidth = [UIScreen mainScreen].bounds.size.width; CGFloat pHeight = [UIScreen mainScreen].bounds.size.height; [imageView setCenter:CGPointMake(pWidth/2, pHeight/2)]; // view に ImageView を追加する [self.view addSubview:imageView]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end |
画像が縦横半分になって表示されました。これは画像自体を半分にしているわけではなく、それを表示しているUIImageViewの枠であるframeサイズを元画像の半分にしているわけです。
CGAffineTransformMakeScale
CGAffineTransformMakeScale を使ってもできます。
これはアフェイン変換(CGAffineTransform)なので画像を回転させたりと他にも色々できますが、その中のシンプルなメソッドの1つMakeScaleを使います。
1 2 3 4 |
CGAffineTransform CGAffineTransformMakeScale ( CGFloat sx, CGFloat sy ); |
sx はX軸のスケールファクターで、syはY軸のファクター
ViewController.m
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
#import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // 背景色の設定 UIColor *customColor = [UIColor colorWithRed:1.0 green:0.9 blue:1.0 alpha:1.0]; self.view.backgroundColor = customColor; //UIImage作成 UIImage *image =[UIImage imageNamed:@"sample@2x.jpg"]; //UIImageView作成 UIImageView *imageView =[[UIImageView alloc]initWithImage:image]; CGFloat xScale = 0.5f; // x軸方向に0.5倍 CGFloat yScale = 0.5f; // y軸方向に0.5倍 imageView.transform = CGAffineTransformMakeScale(xScale, yScale); // 画像が画面中央にくるように位置合わせ CGFloat pWidth = [UIScreen mainScreen].bounds.size.width; CGFloat pHeight = [UIScreen mainScreen].bounds.size.height; [imageView setCenter:CGPointMake(pWidth/2, pHeight/2)]; [self.view addSubview:imageView]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end |
この例では画像サイズを半分にしていましたが、2倍するのも簡単にできます。
1 2 |
CGFloat xScale = 2.0f; // x軸方向に2倍 CGFloat yScale = 2.0f; // y軸方向に2倍 |
References:
CGRectMake – Core Graphics | Apple Developer Documentation
CGAffineTransformMakeScale – Core Graphics | Apple Developer …