2011-07-15 59 views
1

我正在使用iPhone应用程序(LandscapeRight模式),我在第一页添加了一个名为imageView的图像视图,但我必须在第三和第四页上再次删除它。请记住,我必须在第五页上再次添加此图像。将视图视图添加到窗口子视图

我添加的图像与第一页下面的​​代码:

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bg_logo_medium.png"]]; 
imageView.frame = CGRectMake(123, 200, 250, 66); 
imageView.tag = 800; 
imageView.transform = CGAffineTransformMakeRotation(M_PI/2); 
//imageView.window. 
[self.parentViewController.view.window addSubview:imageView]; 
[imageView release]; 

这可怎么删除并重新添加?

回答

2

当你想从它的父通话中移除imageView

[imageView removeFromSuperview]; 

记住imageView收到release时取出,所以你需要确保它是正确retain版,如果你打算重用。换句话说,您需要添加一个ivar到您的控制器类,您可以保留imageView以供重用。实际上,你将它分配给一个局部变量,并在你释放的方法结束时;该变量不应该是本地的,而是一个控制器的ivar,以便具有持久性,并且您将需要在控制器的dealloc中释放它。

编辑:

我假设你有一个UIViewController的地方,因为你需要它,它可以管理添加和删除子视图。

在这个类(我不知道该怎么称呼它,因为你没有说出来),我将宣布一个成员,以存储子视图:

@interface MyViewController { 
    ... 
    UIImageView* imageView; 
    ... 
} 
.... 
@end 

这里实现:

@implementation MyViewController; 
... 

-(void)viewDidLoad { 
    [super viewDidLoad]; 
    .... 
    [self createImageView]; 
    .... 
} 

- (void) createImageView { 
    imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bg_logo_medium.png"]]; 
    imageView.frame = CGRectMake(123, 200, 250, 66); 
    imageView.tag = 800; 
    imageView.transform = CGAffineTransformMakeRotation(M_PI/2); 
} 

- (void)addImageView { 
    [self.parentViewController.view.window addSubview:imageView]; 
} 

- (void) removeImageView { 
    [imageView removeFromSuperview]; 
} 

-(void)dealloc { 
    ... 
    [imageView release]; 
    ... 
} 

因此,在viewDidLoad中,您将创建imageView并将其存储在内部供以后使用;当你需要它时,通过调用addImageView来添加它;当你完成它时,你用removeImageView删除它。

如果您的课程不是视图控制器,您应该可以对其应用相同的更改。

+0

你能提供任何帮助代码吗?我有点困惑。 –

+0

当然。您可以发布包含您已发布的代码的类的定义(.h文件)吗? – sergio

+0

我发布的代码位于我的登录页面的viewDidLoad()块内,我想在主页viewDidLoad()成功登录后将其删除,并且希望在两个页面MainPageController DidLoad()后重新添加它。还有什么东西需要发布?请帮忙。 –

0

塞尔吉奥的建议很好,在这里是正确的。我补充说的另一件事是,在大多数情况下,你应该只有一个窗口的子视图。这是因为窗口只与最近添加的视图的视图控制器协调才能管理自动旋转。从iOS的视图控制器编程指南引用:

在iOS应用程序中,窗口对象执行许多与更改当前方向相关的工作 。但是,它在 中与应用程序的视图控制器一起工作,以确定 是否应该发生方向更改,如果是,则应调用其他方法来响应更改。 具体而言,它可以与视图控制器一起工作,该视图控制器的最新版本添加到或呈现在窗口中,其根视图是 。换句话说,窗口对象仅适用于使用 “呈现视图控制器的视图”中描述的机制之一显示视图的最前面的视图控制器。“

相关问题