添加为子视图时,新创建的UIImageViews不会显示

时间:2011-11-28 21:55:31

标签: ios uiview addsubview

点击后,我想让一些UIImageView对象出现在底层的UIView上。 所以我创建了以下操作:

- (IBAction)startStars: (id) sender
{
UIView* that = (UIView*) sender;  // an UIButton, invisible, but reacting to Touch Down events
int tag = that.tag;

UIView* page = [self getViewByTag:mPages index:tag];  // getting a page currently being viewed
if ( page != nil )
{

    int i;
    UIImage* image = [UIImage imageNamed:@"some.png"];

    for ( i = 0 ; i < 10 ; ++i )
    {   
        // create a new UIImageView at the position of the tapped UIView
        UIImageView* zap = [[UIImageView alloc] initWithFrame:that.frame];
        // assigning the UIImage
        zap.image = image;

        // make a modification to the position so we can see all instances
        CGPoint start = that.layer.frame.origin;
        start.x += i*20;
        zap.layer.position = start;

        [page addSubview:zap];   // add to the UIView
        [zap setNeedsDisplay];   // please please redraw
        [zap release];           // release, since page will retain zap

    }
    [image release];
}
}

不幸的是,什么都没有出现。调用代码,创建对象,加载图像,甚至属性都是预期的。 页面本身是一个真正的基本UIView,使用界面构建器创建,以包含其他视图和控件。

但是,这一切都看不出来......

有谁知道我做错了什么?我是否需要设置alpha属性(或其他)?

由于

Zuppa

3 个答案:

答案 0 :(得分:1)

我会检查几件事:

  • 记录以确保实际调用此部分代码。
  • 使用指定的初始值设定项UIImageView

    [[UIImageView alloc] initWithImage:image];
    

    这将确保您的新视图具有正确的图片大小 - zap和您的图片的相对大小是多少?它可能不在框架内。

  • 确保图像确实存在且已创建

  • 尝试不调整图层属性,而是设置图像视图的center。事实上,在第一个实例中根本不调整它,只是看看你能看到什么。我不确定,但我认为position可能会在视图中移动图层,因此可能会将图像移出视线。尝试:

    CGPoint newCenter = that.frame.origin;
    newCenter.y += zap.bounds.size.height/2;
    newCenter.x += i*20;
    zap.center = origin;
    
  • setNeedsDisplay不是必需的。显然,你的评论是一种绝望行为!

答案 1 :(得分:0)

你的UIImage是否为零? 您不需要{.1}}的.png扩展名才能生效。如果你把它放入,它甚至可能无法正常工作,我不确定。你也过度发布你的形象了。 imageNamed:会返回一个自动释放的图片,因此没有理由在图片上调用版本,除非您还在某处调用了retain。

答案 2 :(得分:0)

我发现了一个潜在错误:在第二次调用时,您将重新添加另一个副本,因此在添加新副本之前请注意删除子视图。 Yu可以选择移动上一个视图。

99%的关于图像不可见视图的案例都是错误的名称,因此建议使用temp var加载:

UIImage img = [UIImage imageNamed ..];

并测试img。