首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Swift中删除UIImageView aspect fit中的间距

如何在Swift中删除UIImageView aspect fit中的间距
EN

Stack Overflow用户
提问于 2015-09-11 07:08:19
回答 3查看 3.8K关注 0票数 14

我创建了一个UIImageView并为其分配了一个UIImage。我将UIImageView内容模式设置为Aspect Fit。如何删除图像顶部和底部的填充,或者如何调整UIImageView的大小以环绕图像?我什么都试过了。

如果你要说获取图像的新大小,它不会起作用。在UIImageView中获取图像大小只给出原始图像的宽度和高度。

请不要链接其他帖子。我已经读过了。它们不起作用。

EN

回答 3

Stack Overflow用户

发布于 2015-09-17 09:58:17

你可以手动计算适合你的图像的UIImageView的框架尺寸,或者使用AVMakeRectWithAspectRatioInsideRect(来自AVFoundation的方法)。

票数 3
EN

Stack Overflow用户

发布于 2016-12-21 01:26:40

因此,假设您将一个UIImageView设置为相对于视图的宽度相等。重绘图像的一种方法是使用Core Graphics。您所要做的就是计算您需要重新绘制图像以适合的比例因子。你可以在这里找到一些很棒的示例:

https://github.com/natecook1000/Image-Resizing/blob/master/Image%20Resizing/ImageResizingMethods.swift

这是一个很好的教程,有基准测试可以更好地理解事物:

http://nshipster.com/image-resizing/

我使用的代码示例(基本上是github方法中的一个,根据我的需要进行了修改):

代码语言:javascript
运行
复制
            let image = UIImage(data: data!)
            let oldWidth = image!.size.width
            let scaleFactor = UIWindow().screen.bounds.width / oldWidth
            let cgImage = image!.CGImage

            let width = Double(CGImageGetWidth(cgImage)) * Double(scaleFactor)
            let height = Double(CGImageGetHeight(cgImage)) * Double(scaleFactor)
            let bitsPerComponent = CGImageGetBitsPerComponent(cgImage)
            let bytesPerRow = CGImageGetBytesPerRow(cgImage)
            let colorSpace = CGImageGetColorSpace(cgImage)
            let bitmapInfo = CGImageGetBitmapInfo(cgImage)

            let context = CGBitmapContextCreate(nil, Int(width), Int(height), bitsPerComponent, bytesPerRow, colorSpace, bitmapInfo.rawValue)

            CGContextSetInterpolationQuality(context, .High)

            CGContextDrawImage(context, CGRect(origin: CGPointZero, size: CGSize(width: CGFloat(width), height: CGFloat(height))), cgImage)

            let scaledImage = CGBitmapContextCreateImage(context).flatMap { return UIImage(CGImage: $0) }
            imageView.image = scaledImage
票数 0
EN

Stack Overflow用户

发布于 2019-08-15 02:24:42

当你使用NSLayoutConstraint时,这太简单了

代码语言:javascript
运行
复制
    let imageView = UIImageView()
    imageView.contentMode = .scaleAspectFit
    view.addSubview(imageView)
    imageView.translatesAutoresizingMaskIntoConstraints = false

    imageView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
    imageView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
    imageView.widthAnchor.constraint(equalToConstant: 250).isActive = true
    let heightLayout = imageView.heightAnchor.constraint(equalToConstant: 250)
    heightLayout.isActive = true


    imageView.image = UIImage(named: "SomeImage")
    if let size = imageView.image?.size {
        heightLayout.constant = size.height / size.width * 250 // 250 is imageView width
        view.layoutIfNeeded()
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32512991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档