You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测UIImageView是否仍保留默认图片?

解决UIImageView默认图片检测问题

嘿,我懂你现在的困扰——要判断第二个UIImageView是不是还显示默认图,这样发邮件的时候就能决定要不要把它加进去对吧?这里有几个靠谱的方法,你可以根据自己的情况选:

方法1:直接对比图片实例

首先,你需要把默认图片提前存成一个全局或者类的实例变量,别每次用的时候才去加载:

// 在你的ViewController里定义
let defaultImageViewImage = UIImage(named: "你的默认图片文件名")

然后在初始化UIImageView的时候,就用这个变量设置默认图:

firstImageView.image = defaultImageViewImage
secondImageView.image = defaultImageViewImage

这样在检测的时候,直接用isEqual(_:)方法对比(比==更可靠,因为UIImage的相等判断有时候会受缓存影响):

// 调用邮件撰写视图时的检测逻辑
if let currentImage = secondImageView.image, currentImage.isEqual(defaultImageViewImage) {
    // 还是默认图,不加入邮件
} else {
    // 已经是用户拍摄的图片,加入邮件
}

方法2:给UIImageView加自定义标记

如果觉得对比图片实例不够稳妥,你可以给UIImageView加一个自定义属性,用来标记是否已经替换成用户的图片:

// 扩展UIImageView,添加关联属性
extension UIImageView {
    private static let hasCustomImageKey = UnsafeRawPointer(bitPattern: "hasCustomImage".hashValue)!
    
    var hasCustomImage: Bool {
        get {
            return objc_getAssociatedObject(self, UIImageView.hasCustomImageKey) as? Bool ?? false
        }
        set {
            objc_setAssociatedObject(self, UIImageView.hasCustomImageKey, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
        }
    }
}

然后在用户拍摄完图片、设置给UIImageView的时候,把这个标记设为true:

// 假设这是相机回调里设置图片的代码
secondImageView.image = userTakenImage
secondImageView.hasCustomImage = true

发邮件时直接判断这个标记就行:

if !secondImageView.hasCustomImage {
    // 未替换,还是默认图,不加入邮件
} else {
    // 已替换,加入邮件
}

方法3:对比图片数据

如果上面两种方法都不适合,你还可以把图片转成Data来对比,这样绝对不会出错:

// 提前把默认图转成Data
guard let defaultImageData = defaultImageViewImage?.pngData() else {
    // 默认图加载失败,做容错处理
    return
}

// 检测时对比当前图的Data
if let currentImageData = secondImageView.image?.pngData(), currentImageData == defaultImageData {
    // 是默认图,不加入邮件
} else {
    // 不是默认图,加入邮件
}

不过这种方法会消耗一点性能,毕竟要转Data,但对于寻宝应用的场景来说完全没问题。

提醒一下:不管用哪种方法,都要确保默认图片的加载是统一的,别在不同地方用UIImage(named:)重复加载,不然可能会出现同一个图片但实例不同的情况,导致对比失败哦!

内容的提问来源于stack exchange,提问作者DJFriar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:18:47