gpt4 book ai didi

ios - 根据预览 View Controller 的 PHAsset 大小计算 preferredContentSize

转载 作者:行者123 更新时间:2023-11-28 10:21:19 26 4
gpt4 key购买 nike

我正在实现一个 3D Touch 预览(peek) View Controller ,以在用力按下 PHAsset 时显示。我从 previewingContext:viewControllerForLocation: 返回的 View Controller 只是全屏显示照片。我目前没有在该 View Controller 上设置 preferredContentSize,因此系统会根据需要调整它的大小。因此,当照片不完全适合框架时(或者如果我使用 ScaleAspectFill 而不是 Fit,照片会被裁剪),照片上方和下方会有一些额外的填充。我想确保不会发生这种情况 - 照片应该完全适合预览框架,没有额外的填充和裁剪。我的问题是,如何确定正确的尺寸?

PHAsset 具有非常有用的 pixelWidthpixelHeight。但是在Apple's sample code ,它指出设置内容大小时提供的宽度应为零,因为它不用于纵向。而且我可以确认它确实忽略了纵向宽度,但没有忽略横向宽度。所以我想我可以在预览 View Controller 中检测 View 的宽度,例如在 viewWillAppear 中,并使用它来执行计算,但这会返回与全屏相同的宽度(375 对于iPhone 6s)。

如何设置 preferredContentSize 以适合全尺寸图像的纵横比?

//Width should be zero, because it's not used in portrait.
photoViewController.preferredContentSize = CGSize(width: 0.0, height: 0.0)

请注意,Dropbox 应用的行为符合预期 - 预览窗口的大小适合正在预览的照片。当然还有照片应用。

最佳答案

经过进一步思考,我想到了一个不错的解决方案。只是一点点数学。 :)

override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)

if self.isShowingAsPreview {
let photoWidth = self.asset.pixelWidth
let photoHeight = self.asset.pixelHeight
let viewWidth = self.view.frame.size.width
let widthAspectRatio = CGFloat(photoWidth) / viewWidth

self.preferredContentSize = CGSizeMake(0, CGFloat(photoHeight) / widthAspectRatio)
}
}

因为纵向忽略了宽度,您可能希望在查看时将 imageViewcontentMode 设置为 .ScaleAspectFill,和 .ScaleAspectFit 弹出时。

关于ios - 根据预览 View Controller 的 PHAsset 大小计算 preferredContentSize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34584270/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com