Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为整个iOS应用程序设置背景图像_Ios_Objective C_Cocoa Touch_Ios7_Uiimageview - Fatal编程技术网

为整个iOS应用程序设置背景图像

为整个iOS应用程序设置背景图像,ios,objective-c,cocoa-touch,ios7,uiimageview,Ios,Objective C,Cocoa Touch,Ios7,Uiimageview,我正尝试按照以下建议为整个应用程序设置背景图像: 但在iOS 7中(不知道其他版本),它根本不能正常工作。 我创建了一个简单的存储库,这样您就可以更好地了解正在发生的事情。 过渡过程中存在一些小故障 当您在第一个视图中点击一行时,第二个视图会被推入导航控制器,但会出现一种奇怪的效果。这似乎是由于透明度的影响。 另一个问题是,当您返回到上一个视图控制器时,视图控制器的阴影会从导航堆栈中弹出。正如我之前所说的,通过运行简单的Xcode项目,您可以理解我的意思 回购: 有什么想法吗?我已经尝试为每个控

我正尝试按照以下建议为整个应用程序设置背景图像:

但在iOS 7中(不知道其他版本),它根本不能正常工作。 我创建了一个简单的存储库,这样您就可以更好地了解正在发生的事情。 过渡过程中存在一些小故障

当您在第一个视图中点击一行时,第二个视图会被推入导航控制器,但会出现一种奇怪的效果。这似乎是由于透明度的影响。 另一个问题是,当您返回到上一个视图控制器时,视图控制器的阴影会从导航堆栈中弹出。正如我之前所说的,通过运行简单的Xcode项目,您可以理解我的意思

回购:

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

希望我解释得好

编辑1

问题似乎是由于iOS 7管理两个视图控制器之间转换的方式造成的。在第二个视图控制器中,尝试使用滑动手势转到上一个控制器时,您可以看到,当您开始该手势时,第一个控制器出现在第二个控制器(您看到的控制器)的下方,并且由于
UITableViewCell
s具有透明背景,您已经看到了第一个控制器。事实上,恐怕没有解决办法。很遗憾,如果不在每个控制器上设置背景图像,我就无法拥有固定的背景图像


将此代码放入appdelegate.m文件applicationdFinishLaunching方法中

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];

您只需在
appdelegate.m文件的applicationdFinishLaunchwithoptions:方法

[self.window setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"MainBackground.png"]]];
[self.view setBackgroundColor:[UIColor clearColor]];
并在每个屏幕的viewDidLoad方法的下面一行

[self.window setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"MainBackground.png"]]];
[self.view setBackgroundColor:[UIColor clearColor]];
在-(BOOL)application:(UIApplication*)application didfishlaunchingwithoptions:(NSDictionary*)launchOptions方法中编写此代码

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

我在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;
我在设置背景色的
didfishlaunchingwithoptions
中注释掉了代码。通过这些更改,在视图控制器之间导航时的工件将消失。我用iPhone视网膜(3.5英寸)和iPhone视网膜(4英寸)模拟器进行了测试

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

另外,该方法需要对自动布局约束进行一些调整。

后期发布

如果您使用的是NavigationController,您可以尝试覆盖TopViewController的“get”部分,以自动设置图像的背景色。在同位语中,我们使用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;
  }
}

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

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

我自己创建了一个UtilTableViewController,它完成了我需要它完成的所有主题和自定义操作,将这些代码放在那里,然后对我的所有视图进行子类化。它不是全局设置的图像,但我只需设置一次,我的所有TableView都会使用它。

您可以通过以下代码设置背景图像。。。我们可以将此代码放入viewcontroller.m文件中的viewdidload方法中


[self.window setBackgroundColor:[UIColor WithPatternImage:[UIImage ImageName:@“bg.png”]]

你看过<代码>外观<代码>方法<代码>外观了吗?你能告诉我更多的细节吗?谢谢使用
appearancewhen contained in:
将允许您为lets say
backgroundColor:
中包含的所有
UITableViews
设置外观,或者您可以使用常规外观方法为每个
UIView
在你的应用程序中。谢谢大力水手,但这不是我的问题。我试图实现的是有一个固定的背景图像,保持在tableview下面。如果我为包含在中的具有
外观的表视图设置背景图像:
,这与在每个视图控制器中设置背景图像相同。我不知道发生了什么,但在我的ios7中,此代码起作用了。您是否在repo中尝试过此代码?代码工作,我的意思是图像显示为背景。“问题”是按下/弹出控制器时的视觉效果,请参见编辑的答案。现在它已经用推/弹出控制器进行了测试&它工作得很好,我也做了同样的事情。你介意把你的测试项目推到一个repo或zip吗?如果它对你有帮助,那么接受我的Ans&不要放弃我的Ans