在iPhone上动态创建的UIImageViews没有显示

时间:2011-01-30 21:33:15

标签: ios4 uiimageview

我已经达到了headdesk的目的,试图在iOS 4.2中动态创建UIImageView。

这是导致我麻烦的代码:

1)设置

UIImageView *iview = [[UIImageView alloc] initWithFrame:CGRectMake(20, 20, 95, 149)];
iview.tag = 200; // see note 1
iview.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
[self.view addSubview:iview];
[iview release];

我试过发布和不发布iview。

2)支付

NSString *img = ...[see note 2];
NSLog(@"Filename: %@", img);

UIImageView *pIV = (UIImageView *)[self.view viewWithTag:200];
if (pIV == nil) {
    abort();
}

UIImage *pI = [UIImage imageWithContentsOfFile:img];
if (pI == nil) {
    abort();
}
[pIV setImage:pI];

这是为了展示我正在看的内容,因为简洁的版本对我不起作用。

注1:上述大多数硬编码值(200,帧边界等)要么是#defines,要么是在iview alloc代码所在的forloop中计算的。为了简洁而遗漏,但如果你认为它是相关的,请告诉我。

注2:这只是在查看NSBundle等后返回文件路径的消息.NSLog输出是

  

2011-01-30 22:09:54.767 ribbit [13529:207]文件名:/ Users / rip / Library / Application Support / iPhone Simulator / 4.2 / Applications / C421AA9F-45BB-41AB-8CB0-1540FABB56D3 / ribbit。 app / cardfront_a7.png

.png确实存在,并且两个哨兵都不是零(因此不会发生abort())。

我确信这只是一些基本的东西。

我尝试过的事情:

1)使用IB生成UIImageView。当它正确连接时,我可以看到框架,并且在IB中显示的默认图像显示。然而,我仍然不能改变图像,这就是我动态创建它们的原因......认为它会更简单。诶。

2)尝试使用各种iviews的实例变量,但这是笨重的(这些UIImageView中有10个被生成)并且它们也不起作用。

因为所有三次尝试都以相同的行为失败(运行正常,只是看不到图像),我假设它只是一些愚蠢的小东西。

我欢迎您提出任何建议。

1 个答案:

答案 0 :(得分:0)

问题似乎是setImage(没有一个)和opaque = YES。

我正在预先创建UIImageViews,然后根据需要懒洋洋地加载它们,这就是为什么setImage不在上面的代码示例中。现在我做了,它似乎正在起作用:

for (int i = 0; i < CARDS_AND_ARROWS; i++) {
    float x = (float)(67 + ((95 + 22) * i));
    UIImageView *iview = [[UIImageView alloc] 
        initWithFrame:CGRectMake(x, 20.0f, 95.0f, 149.0f)];
    [iview setImage:[UIImage imageNamed:@"cardback_a.png"]];
    iview.opaque = YES;
    iview.tag = UPPER_IMG_TAG_0+i;
    iview.autoresizingMask = arm;
    iview.hidden = NO; /* change to YES for distribution */
    [self addSubview:iview];
    [iview release];
}

一旦我添加了这些卡片,就会出现这些卡片。可能是问题没有/没有/正在加载或显示,而是可见性。

无论如何,fuggedaboutit。