iOS /防止图像宽高比在调整大小时更改

时间:2016-05-18 11:04:54

标签: ios aspect-ratio

我首先使用下面的代码创建一个图像拇指(使用类别),然后将拇指定制到有问题的VC,例如,将其旋转。

不知何故,图像的宽高比并没有得到保留,有些人被垂直压扁...所以一张脸看起来像一个侧面的椭圆形,而另一些则被水平压扁,所以一个圆球看起来像一个直立的足球。在个别VC的代码中,我使用的是UIViewContentModeScaleAspectFill并将剪辑设置为yes但无效。还尝试在Storybord中检查这些,但仍然没有运气。

任何人都可以看到下面代码可能出现的问题吗?

//code in viewDidLoad
UIImage *thumbnail = [selectedImage createThumbnailToFillSize:CGSizeMake(side, side)]; 
//see createThumbNail method below
    self.contactImage.image = thumbnail;

    //image has been selected and trimmed to thumb.  Now format it
    CGSize itemSize = CGSizeMake(64, 64);
    UIGraphicsBeginImageContextWithOptions(itemSize, NO, UIScreen.mainScreen.scale);
    CGRect imageRect = CGRectMake(0.0, 0.0, itemSize.width, itemSize.height);
    self.contactImage.contentMode = UIViewContentModeScaleAspectFill;
    self.contactImage.clipsToBounds = YES;
    [self.contactImage.image drawInRect:imageRect];
    self.contactImage.image = UIGraphicsGetImageFromCurrentImageContext();
     self.contactImage.layer.cornerRadius=60.0;
    UIGraphicsEndImageContext();

//Generic category to create thumb
-(UIImage *) createThumbnailToFillSize:(CGSize)size
{
    CGSize mainImageSize = size;
    UIImage *thumb;

    CGFloat widthScaler = size.width / mainImageSize.width;
    CGFloat heightScaler = size.height / mainImageSize.height;

    CGSize repositionedMainImageSize = mainImageSize;

    CGFloat scaleFactor;
    // Determine if we should shrink based on width or hight
    if(widthScaler > heightScaler)
    {
        // calculate based on width scaler
        scaleFactor = widthScaler;
        repositionedMainImageSize.height = ceil(size.height / scaleFactor);
    }
    else {
        // calculate based on height scaler
        scaleFactor = heightScaler;
        repositionedMainImageSize.width = ceil(size.width / heightScaler);
    }

    UIGraphicsBeginImageContext(size);

    CGFloat xInc = ((repositionedMainImageSize.width-mainImageSize.width) / 2.f) *scaleFactor;
    CGFloat yInc = ((repositionedMainImageSize.height-mainImageSize.height) / 2.f) *scaleFactor;

    [self drawInRect:CGRectMake(xInc, yInc, mainImageSize.width * scaleFactor, mainImageSize.height * scaleFactor)];
    thumb = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();


    return thumb;
}

0 个答案:

没有答案