【问题标题】:setImage - addSubview - releasesetImage - addSubview - 发布
【发布时间】:2011-07-11 22:50:08
【问题描述】:

以下是 iPhone 的一些代码:

控制器.h:

IBOutlet UIImageView *userImage;
IBOutlet UIImageView *userImage2;

}
@property (nonatomic, retain) IBOutlet UIImageView *userImage;
@property (nonatomic, retain) IBOutlet UIImageView *userImage2;

Controller.m:

UIImageView *myImage2b = [[UIImageView alloc] initWithFrame:myImageRect4];
[myImage2b setImage:[UIImage imageNamed:@"RedPin.png"]];
[userImage2 addSubview:myImage2b];

[userImage2 release];
[myImage2b release];

我只是想从我的子视图中删除“RedPin”,并将 userImage2 重新用于未来的引脚。当然,userImage2 发布后就无法访问了。这不是地图应用程序。任何想法都会有所帮助。提前致谢。

【问题讨论】:

    标签: iphone uiimageview addsubview imagenamed


    【解决方案1】:

    我要做的是在你的头文件中声明 userImage2。就像你一样。然后在初始化后不用释放它,只需添加

    [userImage2 release]
    

    到你的 dealloc 函数并调用

    [userImage2 removeFromSuperview]
    

    当您想从视图中删除图像时。

    编辑:我似乎稍微误读了您的帖子。如果您只想从 userImage2 中删除红色别针,请使用:

    [[userImage2.subviews objectAtIndex:0] removeFromSuperview]
    

    【讨论】:

    • 感谢 Brenton - 我之前尝试过 removeFromSuperview。我有案例 1 到案例 5。当我在案例 1 中将图像添加到 userImage2,然后在案例 5 中添加 removeFromSuperView 时,即使在我进入案例 5 之前,userImage2 也会从案例 1 中删除。有什么想法吗?
    • @enegene - 我需要更多关于 switch 语句性质的信息,如何以及何时调用它,然后才能在这里提供很多帮助。如果您可以显示代码,我可能会更有帮助。
    • 感谢 Brenton - 我一直在做更多的研究,发现 release 和 autorelease 不会立即执行。因此,我在下一个 setImage 上有 addSubView。我会再调查一下。
    • 你好布伦顿,我刚刚注意到你的编辑 - [[userImage2.subviews objectAtIndex:0] removeFromSuperview]。如果我在创建 userImage2.subview 的地方使用它,则不会显示红色引脚。如果我在另一个不需要 pin 的视图中使用它,它可以工作,但是如果我为该视图多次点击 IBAction 按钮,它会再次尝试 removeFromSuperview 并且我崩溃了。我会尝试设置一个计数,而不是启动 removeFromSuperview 两次。谢谢
    • @enegene 没问题。它崩溃了,因为在删除索引 0 处的对象后 subviews 数组为空。您正在尝试删除不存在的东西。您可以尝试使用 [userImage2.subviews count] 来确保在删除之前存在某些内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多