arn*_*orn 46 xcode uiimage imagenamed ios
我是iOS和Xcode的新手.
我尝试加载图像
[UIImage imageNamed:@"imageName.png/jpg and so on"];
Run Code Online (Sandbox Code Playgroud)
但它只返回零.图像应该在我的项目包中,考虑到我可以从InterfaceBuilder中的拖放菜单中选择它,并通过"添加文件到"项目名"..."菜单将其添加到Xcode中.
我使用.png或.jpg图像没有区别,结果保持不变:它们通过IB工作,但如果我尝试自己运行imageNamed方法则不行.
Mat*_*son 88
只有几个原因可以使用imageNamed来恢复图像:
图像不在您的包中.确保图像实际上在您的项目中.确保通过单击文件并选择其所属的目标来检查目标.
您的图像名称拼写不正确或扩展名有问题.
您正在使用视网膜显示器,但没有@ 2x图像.尝试将模拟器更改为视网膜,看看它是否显示出来.
如果使用资产目录,请确保在属性检查器中选择了正确的设备.
一些技巧:
如果您正在使用模拟器进行测试,请从模拟器中删除应用程序并清理项目,然后重新运行.如果它仍然出现,它应该显示在你的手机上(如果它不是它可能是文件名或@ 2x版本的问题).
如果您在手机上进行测试并且没有显示,请确保使用相同版本的模拟器(如果您有iPhone 4/4s,请确保使用带有视网膜的4/4s模拟器).
根据这篇文章的最后一件事:JPG图像没有加载UIImage imageNamed某些JPG类型使用imageNamed并且没有扩展名存在一些问题.IMO,你应该使用PNG,因为iOS为你压缩它们,除非你只需要使用JPG.
我刚刚在磁盘"file.jpg"上命名的jpg文件有这个问题
我试图加载没有扩展名,只是@"文件".虽然这适用于pngs,但它不适用于jpg.一旦我使用@"file.jpg",它就有效了!
如果您验证了上述所有内容并且发现您的UIImage(名称为"myImage")从您正在构建的动态框架内的代码返回nil ,那么您必须将代码更改为:
UIImage(named: "myImage", in: Bundle(identifier: "com.myframework.name"), compatibleWith: nil)
Run Code Online (Sandbox Code Playgroud)
这应该正确地从CXAssets中检索资产.
雨燕5
如果在动态框架中得到 UIImage nil,则应该使用包标识符设置图像。
您可以像这样创建 Bundle 的扩展;
创建扩展;
extension Bundle {
public static let myFramework = Bundle(identifier: "com.myFramework.bundle")
}
Run Code Online (Sandbox Code Playgroud)然后你可以像这样使用;
UIImage(named: "myImageName", in: Bundle.myFramework, compatibleWith: nil)
Run Code Online (Sandbox Code Playgroud)或者
你可以这样使用;
UIImage(named: "myImageName", in: Bundle(for: type(of: self)), compatibleWith: nil)
Run Code Online (Sandbox Code Playgroud)
我认为第一个更有用,因为它比第二个更具可读性。
| 归档时间: |
|
| 查看次数: |
60013 次 |
| 最近记录: |