以编程方式将图像放在UIVmageController上的UIImageView中

时间:2014-02-06 22:25:51

标签: ios iphone objective-c uikit

我有一个图像(.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];    
}

4 个答案:

答案 0 :(得分:4)

如果您在_imageNSLog或调试器中)进行检查,则可能是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];

}