透明UITabBarController在背景中具有可变的视图

时间:2012-06-16 03:02:42

标签: iphone objective-c ios uiview uitabbarcontroller

我希望有一个UITabBarController,其alpha值为0.5,其透明度允许您在后台查看视图。背景视图必须是可访问和可更改的。

我可以使用这种技术添加背景:https://gist.github.com/1157542

这是一个Category,它为UITabBarController添加了一个子视图,并将子视图发送到后面。但是,因为它是一个类别,所以我不能将子视图作为属性。所以我无法真正访问它。

有没有办法让这个背景视图更灵活,更方便?例如,我可以从任何标签栏控制器的视图控制器轻松添加其他子视图?

3 个答案:

答案 0 :(得分:1)

您应该subclass UITabBarController而不是类别。这将允许您更好地控制对象。这是一个子类的例子。

// MPCustomTabBar.h
@interface MPCustomTabBar : UITabBarController
- (void) setBackgroundImage:(UIImage *)image;
@end

// MPCustomTabBar.m
@interface MPCustomTabBar

- (void) setBackgroundImage:(UIImage *)image  {
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,320,480)];
imageView.backgroundColor = [UIColor colorWithPatternImage:i];  
[[self view] addSubview:imageView];
[[self view] sendSubviewToBack:imageView];
[[self view] setOpaque:NO];
[[self view] setBackgroundColor:[UIColor clearColor]];
[imageView release];
}

@end

现在,您可以执行所需的所有自定义,通过以下方式分配和初始化您的新子类:

MPCustomTabBar *bar = [[MPCustomTabBar alloc] init];

答案 1 :(得分:0)

我的问题的解决方案可能就是这个......

在我的AppDelegate中,就在[self.window makeKeyAndVisible];

之前
self.theImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image1.png"]];
[self.tabBarController.view insertSubview:self.theImage atIndex:0];

然后我可以在任何标签栏控制器的视图控制器中轻松更改此图像,例如:

AppDelegate *appDelegate= (AppDelegate *)[[UIApplication sharedApplication] delegate];
appDelegate.theImage.image = [UIImage imageNamed:@"image2.png"];

..不需要任何类别。

答案 2 :(得分:0)

这对我有用:

  1. 通过将“色调”和“背景”设置为“清除颜色”和“不透明”为“否”,使TabBar透明(通过故事板或以编程方式)

  2. 黑色背景颜色实际上是窗口的颜色。将要用作背景的图像指定给窗口本身:

    UIImage * i = [UIImage imageNamed:@“main_background.png”]; UIColor * c = [[UIColor alloc] initWithPatternImage:i]; [self.window setBackgroundColor:c];