UIImageView图像宽高比在重新绘制后会混乱,以创建圆形蒙版

时间:2016-01-10 18:55:29

标签: ios objective-c uiimageview uiimage

我的应用向Google发送GET请求以获取某些用户信息。一个关键的返回数据是用户图片,它被放置在UIImageView内,该UIImageView始终精确地(100,100)然后重新绘制以为该imageView创建圆形蒙版。这些图片来自不同的来源,因此总是具有不同的宽高比。有些宽度与高度相比较小,有时反之亦然。这导致图像看起来压缩。我尝试了以下内容(没有一个有效):

_personImage.layer.masksToBounds    = YES;
_personImage.layer.borderWidth      = 0;
_personImage.contentMode    = UIViewContentModeScaleAspectFit;
_personImage.clipsToBounds  = YES;

以下是我用来重绘图像的代码(它是从用户fnc12获得的Making a UIImage to a circle form中的第三个答案):

/** Returns a redrawn image that had a circular mask created for the inputted image. */
-(UIImage *)roundedRectImageFromImage:(UIImage *)image size:(CGSize)imageSize withCornerRadius:(float)cornerRadius
{
    UIGraphicsBeginImageContextWithOptions(imageSize, NO, 0.0);   //<== Notice 0.0 as third scale parameter. It is important because default draw scale ≠ 1.0. Try 1.0 - it will draw an ugly image...
    CGRect bounds       = (CGRect){CGPointZero, imageSize};
    [[UIBezierPath bezierPathWithRoundedRect:bounds cornerRadius:cornerRadius] addClip];
    [image drawInRect:bounds];
    UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return finalImage;
}

此方法总是这样调用:

[_personImage setImage:[self roundedRectImageFromImage:image size:CGSizeMake(_personImage.frame.size.width, _personImage.frame.size.height) withCornerRadius:_personImage.frame.size.width/2]];

所以我最终得到了一个完美的圆形图像,但它自身的图像并不是正确的。请帮忙。

P.S。以下是图像在重新绘制图像以创建圆形蒙版之前的宽度大约是其高度的70%时的外观:

enter image description here

2 个答案:

答案 0 :(得分:1)

亲爱的朋友,您好!

这是我的版本:

ViewController 中的代码:

+(void)roundView:(UIView*)view{
    CALayer *viewLayer = view.layer;
    [viewLayer setCornerRadius:view.frame.size.width/2];
    [viewLayer setBorderWidth:0];
    [viewLayer setMasksToBounds:YES];
}

我的 CALayer + Additions 类中的roundView函数:

{{1}}

可能您应该尝试使用我的版本更改创建圆形ImageView的方法,通过修改 ImageView的视图层来创建圆形ImageView。希望它有所帮助。

答案 1 :(得分:0)

要保持UIImageView的宽高比,请在设置图像后使用以下代码行。

[_personImage setContentMode:UIViewContentModeScaleAspectFill];

详细说明请参考参考链接:
https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIImageView_Class/