为整个iOS应用设置背景图片

时间:2013-12-02 22:47:25

标签: ios objective-c cocoa-touch ios7 uiimageview

我正在尝试按照以下建议为整个应用设置背景图片:set background image for entire iPhone / iPad app

但是在iOS 7中(不了解其他版本)它根本不能正常工作。 我创建了一个简单的存储库,以便您可以更好地了解正在发生的事情。 转换中有一些故障。

当您点击第一个视图中的某一行时,第二个视图会被推入导航控制器,但会产生奇怪的效果。似乎行透明度起到了这个作用。 另一个问题是,当你回到前一个视图控制器时,会从导航堆栈中弹出一个视图控制器的微妙阴影。正如我之前所说,你可以通过运行简单的Xcode项目得到我的意思。

回购:https://github.com/socksz/FixedBackgroundImage

有什么想法吗?我已经尝试为每个控制器设置背景图像,但这不是我想要的,因为这样,图像“重叠”了前一个背景图像,并且它不是所需的效果。

希望我能解释清楚。

编辑1

似乎问题出现是因为iOS 7管理两个视图控制器之间的转换。在你进入第二个视图控制器并尝试使用滑动手势转向上一个控制器时,您可以看到,当您开始手势时,第一个控制器出现在第二个控制器(您正在看到的控制器)下方,并且,因为{ {1}}具有透明背景,您已经看到第一个控制器。其实我担心没有解决方案。遗憾的是,如果不在每个控制器上设置背景图像,我就无法获得固定的背景图像。

enter image description here

7 个答案:

答案 0 :(得分:7)

我在iPhone应用程序中要求根据用户的偏好设置页面的背景图像。我处理它的方式是添加UIImageView背景图像作为视图的子视图,就像这样 -

UIImageView *bgImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"background-image"]];
bgImageView.frame = self.view.bounds;
[self.view addSubview:bgImageView];
[self.view sendSubviewToBack:bgImageView];

我克隆了你的Github存储库,并在两个视图控制器的viewDidLoad中添加了上面的代码。我还在同一方法中添加了以下代码行 -

self.tableView.opaque = NO;

我在didFinishLaunchingWithOptions中注释了您设置背景颜色的代码。通过这些更改,在视图控制器之间导航时的工件消失了。我测试了iPhone Retina(3.5英寸)以及iPhone Retina(4英寸)模拟器。

在故事板中ViewController导航和导航时看到工件的原因需要进行一些调查。我的建议可能适用于您的要求,也可能不适用,但是,您可以尝试将其作为解决方案。

P.S。该方法需要一些调整来自动布局约束。

答案 1 :(得分:4)

你只需要在一行中写一行 appdelegate.m 文件的 applicationdidFinishLaunchingWithOptions:方法

[self.window setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"MainBackground.png"]]];

并在每个屏幕的 viewDidLoad 方法中添加到下面的行

[self.view setBackgroundColor:[UIColor clearColor]];

答案 2 :(得分:2)

我没有办法在全球范围内使用它。但是,您可能会发现这对静态/固定图像(而不是设置backgroundColor属性时获得的运动图像)非常有用,请为每个屏幕使用backgroundView属性。

self.tableView.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"background.jpg"]];

我自己创建了一个UtilTableViewController,它完成了我需要它做的所有主题和自定义事情,将这些代码放在那里,然后继承我的所有视图。它不是全局设置的图像,但我只需要设置一次,我的所有TableView都将使用它。

答案 3 :(得分:1)

将此代码放入appdelegate.m文件applicationDidFinishLaunching方法。

UINavigationController *navigationController = [[UINavigationController alloc]initWithRootViewController:rootViewController];   

     windowBackground=[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"background_window.png"]];
                windowBackground.frame=CGRectMake(0, 0, 320, 568);
                [window addSubview:windowBackground];
                [windowBackground release];

            window.frame = CGRectMake(0, 0, window.frame.size.width,568);

            [window addSubview:[navigationController view]];
            [window makeKeyAndVisible];

在每个viewController类viewDidLoad方法中添加此代码。

self.view.backgroundColor = [UIColor clearColor];

答案 4 :(得分:1)

后期......

如果您正在使用NavigationController,您可能会尝试覆盖TopViewController" get"部分自动将BackGroundColor设置为您的图像。 Appologies,我们使用Xamarin为我们转换为C#到目标C(不确定具体的语法)。在C#中,它会在您的NavigationController类中看起来像这样。

    public override UIViewController TopViewController
{
  get
  {
    if (base.TopViewController.View.BackgroundColor != "Your Image")
    {
      base.TopViewController.View.BackgroundColor = "Your Image";
    }
    return base.TopViewController;
  }
}

答案 5 :(得分:0)

将此代码写入 - (BOOL)应用程序:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法

 UIColor *background = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"YourImageName.png"]];
 self.window.backgroundColor = background;

答案 6 :(得分:0)

你可以通过下面的代码设置背景图片......我们可以将这段代码放在viewcontroller.m文件的viewdidload方法中

[self.window setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@“bg.png”]]];