的UIImageView方面配合和中心(UIImageView aspect fit and cen

2019-07-22 00:03发布

我的形象图,编程声明,并且我设置它的形象,也编程。

然而,我发现自己无法设置图像既适应方面并对准中心到图像视图。

换句话说,我想要的形象:

  • 缩小以适应方面,如果图像是大的。
  • 中心而不是扩大规模,如果图像很小。

我如何获得的?

Answer 1:

刚刚粘贴的解决方案:

就像@manohar说

imageView.contentMode = UIViewContentModeCenter;
if (imageView.bounds.size.width > ((UIImage*)imagesArray[i]).size.width && imageView.bounds.size.height > ((UIImage*)imagesArray[i]).size.height) {
       imageView.contentMode = UIViewContentModeScaleAspectFit;
}

解决我的问题



Answer 2:

在迅速的语言,我们可以设置的UIImage视图的内容模式类似以下为:

let newImgThumb = UIImageView(frame: CGRect(x: 10, y: 10, width: 100, height: 100))
newImgThumb.contentMode = .scaleAspectFit


Answer 3:

更新答案

当我最初回答了这个问题在2014年,没有要求在一个小图像的情况下不缩放图像了。 (此问题已在2015年编辑 。)如果你有这样的要求,你就确实需要将图像的大小与该ImageView的,并使用两种UIViewContentModeCenter (在比ImageView的小的图像的情况下)或者UIViewContentModeScaleAspectFit所有其他案件。

原来的答案

设置的ImageView contentMode到UIViewContentModeScaleAspectFit对我来说已经足够了。 这似乎居中影像。 我不知道为什么别人都在用基于图像的逻辑。 也看到这个问题: iOS的方面配合和中心



Answer 4:

我解决了这个问题是这样的。

  1. setImage到UIImageView (与UIViewContentModeScaleAspectFit
  2. 得到IMAGESIZE (CGSize imageSize = imageView.image.size)
  3. UIImageView调整。 [imageView sizeThatFits:imageSize]
  4. 移动你想要的位置。

我希望把上的UIView的顶部中心UICollectionViewCell 。 所以,我用这个功能。

- (void)setImageToCenter:(UIImageView *)imageView
{
    CGSize imageSize = imageView.image.size;
    [imageView sizeThatFits:imageSize];
    CGPoint imageViewCenter = imageView.center;
     imageViewCenter.x = CGRectGetMidX(self.contentView.frame);
    [imageView setCenter:imageViewCenter];
}

这个对我有用。



Answer 5:

该亚类使用中心如果图像不大于视图更大,否则按比例缩小。 我找到了这个有用UIImageView改变大小。

它显示的图像比对大尺寸的视图更小,但比用于小尺寸的视图大。 我希望它只是按比例缩小,但是不起来。

class CenterScaleToFitImageView: UIImageView {
    override var bounds: CGRect {
        didSet {
            adjustContentMode()
        }
    }

    override var image: UIImage? {
        didSet {
            adjustContentMode()
        }
    }

    func adjustContentMode() {
        guard let image = image else {
            return
        }
        if image.size.width > bounds.size.width ||
            image.size.height > bounds.size.height {
            contentMode = .ScaleAspectFit
        } else {
            contentMode = .Center
        }
    }
}


Answer 6:

你可以通过设置图像视图UIViewContentModeScaleAspectFill的内容模式实现这一目标。

然后用下面的方法方法来获得调整大小UIImage对象。

- (UIImage*)setProfileImage:(UIImage *)imageToResize onImageView:(UIImageView *)imageView
{
    CGFloat width = imageToResize.size.width;
    CGFloat height = imageToResize.size.height;
    float scaleFactor;
    if(width > height)
    {
        scaleFactor = imageView.frame.size.height / height;
    }
    else
    {
        scaleFactor = imageView.frame.size.width / width;
    }

    UIGraphicsBeginImageContextWithOptions(CGSizeMake(width * scaleFactor, height * scaleFactor), NO, 0.0);
    [imageToResize drawInRect:CGRectMake(0, 0, width * scaleFactor, height * scaleFactor)];
    UIImage *resizedImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return resizedImage;
}

编辑这里(SWIFT版)

func setProfileImage(imageToResize: UIImage, onImageView: UIImageView) -> UIImage
{
    let width = imageToResize.size.width
    let height = imageToResize.size.height

    var scaleFactor: CGFloat

    if(width > height)
    {
        scaleFactor = onImageView.frame.size.height / height;
    }
    else
    {
        scaleFactor = onImageView.frame.size.width / width;
    }

    UIGraphicsBeginImageContextWithOptions(CGSizeMake(width * scaleFactor, height * scaleFactor), false, 0.0)
    imageToResize.drawInRect(CGRectMake(0, 0, width * scaleFactor, height * scaleFactor))
    let resizedImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    return resizedImage;
}


Answer 7:

let bannerImageView = UIImageView();
bannerImageView.contentMode = .ScaleAspectFit;
bannerImageView.frame = CGRectMake(cftX, cftY, ViewWidth, scrollHeight);


Answer 8:

[your_imageview setContentMode:UIViewContentModeCenter];


Answer 9:

迅速:

yourImageView.contentMode = .center

您可以使用下列选项来定位你的形象:

  • scaleToFill
  • scaleAspectFit //内容缩放以适合与固定的方面。 余数是透明
  • redraw //重绘的范围变化(电话-setNeedsDisplay)
  • center //内容保持相同的尺寸。 定位调整。
  • top
  • bottom
  • left
  • right
  • topLeft
  • topRight
  • bottomLeft
  • bottomRight


Answer 10:

对于人们寻找UIImage的大小调整,

@implementation UIImage (Resize)

- (UIImage *)scaledToSize:(CGSize)size
{
    UIGraphicsBeginImageContextWithOptions(size, NO, 0.0f);
    [self drawInRect:CGRectMake(0.0f, 0.0f, size.width, size.height)];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}

- (UIImage *)aspectFitToSize:(CGSize)size
{
    CGFloat aspect = self.size.width / self.size.height;
    if (size.width / aspect <= size.height)
    {
        return [self scaledToSize:CGSizeMake(size.width, size.width / aspect)];
    } else {
        return [self scaledToSize:CGSizeMake(size.height * aspect, size.height)];
    }
}

- (UIImage *)aspectFillToSize:(CGSize)size
{
    CGFloat imgAspect = self.size.width / self.size.height;
    CGFloat sizeAspect = size.width/size.height;

    CGSize scaledSize;

        if (sizeAspect > imgAspect) { // increase width, crop height
            scaledSize = CGSizeMake(size.width, size.width / imgAspect);
        } else { // increase height, crop width
            scaledSize = CGSizeMake(size.height * imgAspect, size.height);
        }
    UIGraphicsBeginImageContextWithOptions(size, NO, 0.0f);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextClipToRect(context, CGRectMake(0, 0, size.width, size.height));
    [self drawInRect:CGRectMake(0.0f, 0.0f, scaledSize.width, scaledSize.height)];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}

@end


文章来源: UIImageView aspect fit and center