首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在UIImage中实现对UIImageView标度和偏移量的精确控制

在UIImage中实现对UIImageView标度和偏移量的精确控制
EN

Stack Overflow用户
提问于 2019-01-09 21:29:07
回答 1查看 882关注 0票数 0

我现在有一个UIImageView,其中加载了一个图像,其中的contentMode被设置为scaleAspectFill。是否有一种方法可以指定要显示的图像的确切部分,而不是默认的中心,还是我以错误的方式来处理这个问题?

Swift代码:

代码语言:javascript
运行
复制
basketballImage = UIImageView()     

basketballImage.contentMode = .scaleAspectFill
basketballImage.clipsToBounds = true
basketballImage.image = UIImage(named: "Basketball")

原始图像

期望结果

失败示例1:contentMode = .scaleAspectFill

失败示例2:contentMode = .top

EN

回答 1

Stack Overflow用户

发布于 2019-01-09 22:24:51

iOS不可能知道您真正想要的是什么,因为您的缩放是任意的。

通过设置contentScaleFactor属性,可以有效地裁剪(放大)。体裁与你的目标无关。

现在,任意垂直偏移量需要仿射转换,但只能使用容器UIView来维护布局。您必须在父框架内转换整个UIImageView帧(除非您想要非常花哨地重写draw方法或使用仿射转换钩子重新实现UIImageView )。

通过安装2倍分辨率的映像并使用以下方法,我大致实现了您想要的结果:

代码语言:javascript
运行
复制
override func viewDidLoad() {
    super.viewDidLoad()

    let offset: CGFloat = 120.0
    let scale: CGFloat = 3.0

    /* imageView is a *child* of imageContainer and constrained to be exactly the same size and position */
    imageContainer.clipsToBounds = true

    imageView.image = UIImage(named: "basketball")
    imageView.contentMode = .center
    imageView.contentScaleFactor = scale
    imageView.transform = CGAffineTransform(translationX: 0, y: offset)
}

这比我想的要难,因为有另一层嵌套,但是UIImageView没有那么复杂。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54118649

复制
相关文章

相似问题

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