Swift:如何判断相册选中图片横竖屏,仅为横屏图添加内容模式切换按钮
解决横竖屏图片判断与按钮显示问题
很简单,核心就是通过UIImage的宽高比例来判断它是横屏(mode1)还是竖屏(mode2),再结合图片选择器的代理方法控制按钮的显示状态。下面是具体实现步骤:
1. 明确判断逻辑
判断图片横竖屏的关键是对比图片的宽度和高度:
- 如果
image.size.width > image.size.height:属于横屏(mode1),需要显示更改内容模式的按钮 - 如果
image.size.width < image.size.height:属于竖屏(mode2),隐藏按钮 - (可选)如果宽高相等(正方形图片),可以根据你的需求决定是否显示按钮
注意:UIImage的size属性是逻辑尺寸,但宽高比例和实际像素比例一致,所以直接对比宽高值就够了,不需要额外处理scale。
2. 在图片选择器代理方法中实现判断
你已经初始化了UIImagePickerController并设置了代理,接下来只需要实现didFinishPickingMediaWithInfo代理方法,在里面获取选中的图片、判断横竖屏,再控制按钮显示:
extension YourViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate { func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { picker.dismiss(animated: true) // 获取选中的原始图片(也可以用editedImage如果允许编辑) guard let selectedImage = info[.originalImage] as? UIImage else { print("无法获取选中的图片") return } // 设置图片的内容模式为scaleAspectFit yourImageView.contentMode = .scaleAspectFit yourImageView.image = selectedImage // 判断是否为横屏(mode1) let isLandscapeMode = selectedImage.size.width > selectedImage.size.height // 控制更改内容模式按钮的显示:仅mode1显示 yourContentModeButton.isHidden = !isLandscapeMode } func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { picker.dismiss(animated: true) } }
3. 补全图片选择器初始化代码
你之前的初始化代码可以补全为:
let picker = UIImagePickerController() picker.delegate = self picker.navigationBar.tintColor = UIColor.white picker.sourceType = .photoLibrary // 可根据需求换成.camera picker.allowsEditing = false // 需要编辑功能的话设为true present(picker, animated: true)
这样就能实现:选中横屏图片时显示更改内容模式的按钮,竖屏图片时按钮自动隐藏啦~
内容的提问来源于stack exchange,提问作者Dimoreno
相关产品推荐
相关产品推荐

