我有一个图像(.png文件),我想放在ViewController的ImageView中。我使用以下代码,但模拟器给我一个没有图像的空白白色视图。 .png文件与ViewController文件位于同一目录中。这是代码:
@implementation ViewController
{
NSArray *_pArray;
UIImage *_image;
UIImageView *_imageView;
}
- (void)viewDidLoad
{
[super viewDidLoad];
_image = [[UIImage alloc] initWithContentsOfFile:@"TM-1P2.png"];
_imageView = [[UIImageView alloc]initWithFrame:self.view.bounds];
[_imageView setImage:_image];
[_imageView setContentMode:UIViewContentModeScaleAspectFit];
[self.view addSubview:_imageView];
}
答案 0 :(得分:4)
如果您在_image
(NSLog
或调试器中)进行检查,则可能是nil
。使用initWithContentsOfFile
时,您应指定整个路径,例如:
NSString *path = [[NSBundle mainBundle] pathForResource:@"TM-1P2" ofType:@"png"];
_image = [[UIImage alloc] initWithContentsOfFile:path];
或者,您可以使用以下内容自动查找捆绑中的图像:
_image = [UIImage imageNamed:@"TM-1P2.png"];
后一种语法imageNamed
缓存图像(即使您关闭视图控制器,也会将其保留在内存中)。如果你必须在整个应用程序中反复使用相同的图像(因为它不必每次都重新加载它),那就太棒了,但如果你只使用一次,你可能不想使用它imageNamed
。正如imageNamed
文档所说:
如果您的图像文件只显示一次,并希望确保它不会添加到系统的缓存中,则应使用
imageWithContentsOfFile:
创建图像。这会将您的一次性图像保留在系统图像缓存之外,从而可能会改善应用程序的内存使用特性。
请注意,这两个假设您已成功将此图片添加到捆绑包中。
另一方面,如果图片位于Documents
文件夹中,您可以这样加载:
NSString *documentsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSString *path = [documentsPath stringByAppendingPathComponent:@"TM-1P2.png"];
_image = [[UIImage alloc] initWithContentsOfFile:path];
最后,请注意iOS设备区分大小写(通常不是模拟器),因此请确保您的大小写正确。
与您的问题无关,大括号之间的变量可能不应该在@implementation
中定义,而是应该将它们放在@interface
中。例如,您可以将它们放在.h文件中,或者更好,您可以将它们放在.m文件中的私有类扩展中,就在@implementation
之前:
@interface ViewController ()
{
NSArray *_pArray;
UIImage *_image;
UIImageView *_imageView;
}
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
NSString *path = [[NSBundle mainBundle] pathForResource:@"TM-1P2" ofType:@"png"];
_image = [[UIImage alloc] initWithContentsOfFile:path];
_imageView = [[UIImageView alloc]initWithFrame:self.view.bounds];
[_imageView setImage:_image];
[_imageView setContentMode:UIViewContentModeScaleAspectFit];
[self.view addSubview:_imageView];
}
// ...
@end
答案 1 :(得分:0)
您是否介入了调试器?
我很想知道_image
是否为非零 - 而且最可能的原因是你没有将它添加到你的项目中。
答案 2 :(得分:0)
如果您的图片中的图片名称为“TM-1P2.png”,则可以执行以下操作:
_image = [UIImage imageNamed:@"TM-1P2.png"];
答案 3 :(得分:0)
- (void)viewDidLoad {
[super viewDidLoad];
UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.view.layer.frame.size.width, self.view.layer.frame.size.height)];
imgView.image = [UIImage imageNamed:@"emptyCart.jpeg"];
imgView.backgroundColor = [UIColor whiteColor];
imgView.contentMode = UIViewContentModeCenter;
[self.view addSubview: imgView];
}