我已经达到了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个被生成)并且它们也不起作用。
因为所有三次尝试都以相同的行为失败(运行正常,只是看不到图像),我假设它只是一些愚蠢的小东西。
我欢迎您提出任何建议。
答案 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。