How to scale a UIImageView proportionally?

2019-01-01 07:40发布

I have a UIImageView and the objective is to scale it down proportionally by giving it either a height or width.

UIImage *image = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://farm4.static.flickr.com/3092/2915896504_a88b69c9de.jpg"]]];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; 

//Add image view
[self.view addSubview:imageView];   

//set contentMode to scale aspect to fit
imageView.contentMode = UIViewContentModeScaleAspectFit;

//change width of frame
CGRect frame = imageView.frame;
frame.size.width = 100;
imageView.frame = frame;

The image did get resized but the position is not at the top left. What is the best approach to scaling image/imageView and how do I correct the position?

17条回答
怪性笑人.
2楼-- · 2019-01-01 08:15

Fixed easily, once I found the documentation!

 imageView.contentMode = UIViewContentModeScaleAspectFit;
查看更多
闭嘴吧你
3楼-- · 2019-01-01 08:17

You could try making the imageView size match the image. The following code is not tested.

CGSize kMaxImageViewSize = {.width = 100, .height = 100};
CGSize imageSize = image.size;
CGFloat aspectRatio = imageSize.width / imageSize.height;
CGRect frame = imageView.frame;
if (kMaxImageViewSize.width / aspectRatio <= kMaxImageViewSize.height) 
{
    frame.size.width = kMaxImageViewSize.width;
    frame.size.height = frame.size.width / aspectRatio;
} 
else 
{
    frame.size.height = kMaxImageViewSize.height;
    frame.size.width = frame.size.height * aspectRatio;
}
imageView.frame = frame;
查看更多
临风纵饮
4楼-- · 2019-01-01 08:17

For Swift :

self.imageViews.contentMode = UIViewContentMode.ScaleToFill
查看更多
低头抚发
5楼-- · 2019-01-01 08:25

Set your ImageView by selecting Mode to Aspect Fill and check the Clip Subviews box.

enter image description here

查看更多
ら面具成の殇う
6楼-- · 2019-01-01 08:25

Here is how you can scale it easily.

This works in 2.x with the Simulator and the iPhone.

UIImage *thumbnail = [originalImage _imageScaledToSize:CGSizeMake(40.0, 40.0) interpolationQuality:1];
查看更多
余生无你
7楼-- · 2019-01-01 08:26
imageView.contentMode = UIViewContentModeScaleAspectFill;
imageView.clipsToBounds = YES;
查看更多
登录 后发表回答