回答編集履歴

1 s

_Kentarou

_Kentarou score 8313

2018/06/22 05:49  投稿

現在はメモリ管理を自分で行う(MRC)ことが必要でないので、自分で開放している以下の処理を削除すればエラーは出なくなります。
```
[imageView release];
```
`UIImage`のサイズは取得できますので、そちらから`UIImageView`のサイズを決めてあげればよいと思います。
※画像が大きい場合等リサイズが必要な場合があると思いますが、、、
```
#import "ViewController.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@end
@implementation ViewController
- (void)viewDidLoad {
   [super viewDidLoad];
   
   UIImage *image = [UIImage imageNamed:@"mm2"];
   // UIImageのサイズを取得
   CGSize imageSize = image.size;
   
   // UIImageViewの生成
   UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
   imageView.frame = CGRectMake(0, 0, imageSize.width, imageSize.height);
   imageView.center = CGPointMake(160, 240);
   imageView.tag = 10;
   [self.view addSubview:imageView];
}
@end
```  
 
回答追記  
---  
 
画面の幅にから`20px`づつ控えられたサイズで画像の幅を固定して、その比率に合わせて高さを計算して画像をリサイズして、最後に角丸にするコードを書いてみました。  
※ 幅を基準にしているので横長の画像は大丈夫ですが、縦長の画像だと下にはみ出す可能性があります、あとは好きなように調整してください。  
 
参考にしてみてください。  
 
```  
// ViewController.h  
#import <UIKit/UIKit.h>  
 
@interface ViewController : UIViewController  
 
@end  
 
 
@interface UIImage (Additional)  
- (UIImage*) btk_ImageResized : (CGSize)size;  
@end  
```  
 
```  
// ViewController.m  
 
#import "ViewController.h"  
 
@interface ViewController ()  
 
@end  
 
@implementation ViewController  
 
- (void)viewDidLoad {  
   [super viewDidLoad];  
     
   CGFloat imageMargin = 20;  
   CGFloat width = [UIScreen mainScreen].bounds.size.width - imageMargin * 2;  
     
   UIImage *image = [UIImage imageNamed:@"mm2"];  
   CGFloat imageWidth = image.size.width;  
   CGFloat imageHeight = image.size.height;  
     
   CGFloat w = width / imageWidth;  
   CGFloat h = imageHeight * w;  
     
   // 画像リサイズ  
   UIImage * resizeImage = [image btk_ImageResized:CGSizeMake(width, h)];  
     
   //UIImageViewの生成  
   UIImageView *imageView = [[UIImageView alloc] initWithImage: resizeImage];  
   imageView.frame = CGRectMake(20, 100, width, h);  
   imageView.contentMode = UIViewContentModeScaleAspectFit;  
   [self.view addSubview:imageView];  
   
  [imageView layer].masksToBounds = YES;  
  [imageView layer].cornerRadius = 10;  
}  
@end  
 
 
@implementation UIImage (Additional)  
 
- (UIImage*) btk_ImageResized : (CGSize)size  
{  
   if(CGSizeEqualToSize(self.size, size) && self.imageOrientation == UIImageOrientationUp){  
       // No need to resize nor convert orientation  
       return self;  
   }  
   UIGraphicsBeginImageContext(size);  
   @try {  
       CGContextRef context = UIGraphicsGetCurrentContext();  
       CGContextSetInterpolationQuality(context, kCGInterpolationHigh);  
       [self drawInRect:CGRectMake(0, 0, size.width, size.height)];  
       return UIGraphicsGetImageFromCurrentImageContext();  
   }  
   @finally {  
       UIGraphicsEndImageContext();  
   }  
}  
@end  
```

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る