ios 如何获取UIImage中使用的图像名称?

whhtz7ly  于 12个月前  发布在  iOS
关注(0)|答案(6)|浏览(273)

我正在使用一个UIImage,其中有一个Image,我想知道Image的名称。

kcwpcxri

kcwpcxri1#

UIImage并没有内置这个功能,因为图像并不总是从文件中加载的。但是,你可以创建一个自定义的UIImageView子类来满足你的需要。

dkqlctbz

dkqlctbz2#

这是不可能的。UIImage示例包含实际的图像数据,而没有任何对文件名的引用。

nafvub8i

nafvub8i3#

这段代码会帮助你

NSString *imgName = [self.imgView1st image].accessibilityIdentifier;

    NSLog(@"%@",imgName);

    [self.imgView2nd setImage:[UIImage imageNamed:imgName]];

字符串

gab6jxml

gab6jxml4#

图像不一定来自文件或其他命名源,因此并非所有图像都有名称。当您从文件创建图像时,可以将名称存储在单独的NSString*中,然后在必要时引用存储的名称。

clj7thdc

clj7thdc5#

这个答案(https://stackoverflow.com/a/72542728/897465)有(我认为的)最好的答案:

let img = UIImage(named: "something")
img?.imageAsset?.value(forKey: "assetName")

字符串
这里有一个方便的扩展:

extension UIImage {

    var containingBundle: Bundle? {
        imageAsset?.value(forKey: "containingBundle") as? Bundle
    }

    var assetName: String? {
        imageAsset?.value(forKey: "assetName") as? String
    }

}

klsxnrf1

klsxnrf16#

在以后的iOS版本中,可以从描述中提取图像名称。注意,仅供调试使用!

extension UIImage {

    /// Extracts image name from a description.
    /// * Example description: `<UIImage:0x60000278ce10 named(main: ic_timeline_milestone_bluedot) {16, 16}>`
    /// * Example name: `ic_timeline_milestone_bluedot`
    /// - warning: For the debug use only.
    var name: String? {
        let description = self.description
        guard let regexp = try? NSRegularExpression(pattern: "\\(main: (.*)\\)", options: []) else { return nil }
        guard let match = regexp.matches(in: description, options: [], range: description.fullRange).first else { return nil }
        guard match.numberOfRanges > 0 else { return nil }
        let idx1 = description.index(description.startIndex, offsetBy: range.lowerBound)
        let idx2 = description.index(description.startIndex, offsetBy: range.upperBound)
        return String(description[idx1..<idx2])
    }
}

字符串

相关问题