iOS图片AVMakeRectWithAspectRatioInsideRect妙用

from:http://www.jianshu.com/p/827090aa933b?utm_campaign=maleskine&utm_content=note&utm_medium=writer_share&utm_source=weibo

在 iOS 中我们经常会碰到一些 imagView 的 UIContentMode的显示方式,最初我怎么记也搞不太清楚,后来我看到了这幅图,我发现我遇到了指明灯了,一图解千惑,这里分享给大家。(ps:大家别说我菜啊)

image
image

1.神器计算图片位置的函数:AVMakeRectWithAspectRatioInsideRect()

是根据image的比例进行居中显示, 如果没用这个函数, 要自己计算一下, 之前也做过这方面的需求, 我是调整imageView的frame来解决的, 粘上代码:

<span style="font-size:14px;">    if(imgWidth/imgHeight < screenWidth/screenHeight){
        //按宽度算
        
        CGFloat newWidth = imgWidth/imgHeight*screenHeight;
        
        self.showImageView.frame = CGRectMake((screenWidth-newWidth)/2, 0, newWidth, screenHeight);
    }
    else {
        //按高度算
        
        CGFloat newHeight = imgHeight/imgWidth*screenWidth;
        self.showImageView.frame = CGRectMake(0, (screenHeight-newHeight)/2, screenWidth, newHeight);
    }
</span>

还是下面的方法比较easy, 轻松搞定, 膜拜一下, mark之 !

通过这个函数,我们可以计算一个图片放在另一个 view 按照一定的比例居中显示,可能说的我比较抽象,还是用图来显示,可以说它可以直接一个 image 以任何的比例显示显示在 imageview 中居中所处的位置,拿 UIViewContontAspectFit来演示,

UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, 300, 300)];
imageView.center = self.view.center;
imageView.backgroundColor = [UIColor redColor];
imageView.contentMode = UIViewContentModeScaleAspectFit;
UIImage *image = [UIImage imageNamed:@"mm.jpg"];
imageView.image = image;

 CGRect iamgeAspectRect = AVMakeRectWithAspectRatioInsideRect(image.size, imageView.bounds);
NSLog(@"iamgeAspectRect = %@, imageView =%@",NSStringFromCGRect(iamgeAspectRect),NSStringFromCGRect(imageView.frame));
[self.view addSubview:imageView];

图片显示如下:(ps:这妹子是我公司一个管理 公司weibo账号 的妹纸,目前我在勾搭,你们不要羡慕,生活依然很美好的嘛!)

呵呵
呵呵

log 打因结果如下:
iamgeAspectRect = {{37.563884156729145, 0}, {224.87223168654171, 300}}, imageView ={{37.5, 183.5}, {300, 300}}

可以从 log 得出 对应的 image 以 aspectFit 的方式在 imageView 的位置,在 imageView 中的位置是(37.5,0)。这样你根本不需要任何多的代码来计算了。(ps:这个函数是在 AV框架的,童鞋们自行导入。)

具体它的其他的好处,如果你是做相机或者图片处理的你就知道它的好处了,什么处理横屏照片了,16:9,1:1,4:3图片在控件中的位置,控件上的点对应图片上的点的位置拉,等等。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值