添加和删​​除图像视图到窗口子视图

时间:2011-07-15 07:54:39

标签: iphone objective-c cocoa-touch uiview subview

我正在使用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 个答案:

答案 0 :(得分:2)

如果要从超级浏览电话中删除imageView

[imageView removeFromSuperview];

请注意,imageView在删除时会收到release,因此如果您打算重复使用,则需要确保retain正确dealloc。换句话说,您需要在控制器类中添加一个ivar,您可以在其中保留imageView以供重用。实际上你将它分配给一个局部变量,并在你释放的方法的最后;变量不应该是本地的,而是控制器的ivar,以便具有持久性,并且您需要在控制器的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

因此,在addImageView中,您可以创建imageView并将其存储在内部供以后使用;如果需要,可以通过调用removeImageView添加它;完成后,请使用{{1}}将其删除。

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

答案 1 :(得分:0)

塞尔吉奥的建议很好,也很正确。我要添加的另一件事是,在大多数情况下,您应该只有一个窗口的子视图。这是因为窗口仅与最近添加的视图的视图控制器进行坐标以管理自动旋转。从适用于iOS的View Controller编程指南中引用:

  

在iOS应用程序中,window对象完成了大部分工作   与改变当前方向有关。但是,它适用于   与应用程序的视图控制器结合来确定   是否应该发生方向改变,如果是,那么是什么   应该调用其他方法来响应变化。   具体来说,它适用于其根视图为的视图控制器   最近添加到窗口或在窗口中显示。换一种说法,   window对象仅适用于最前面的视图控制器   使用其中描述的机制之一显示视图   “呈现视图控制器的视图。”