为整个iOS应用程序设置背景图像
我正尝试按照以下建议为整个应用程序设置背景图像: 但在iOS 7中(不知道其他版本),它根本不能正常工作。 我创建了一个简单的存储库,这样您就可以更好地了解正在发生的事情。 过渡过程中存在一些小故障 当您在第一个视图中点击一行时,第二个视图会被推入导航控制器,但会出现一种奇怪的效果。这似乎是由于透明度的影响。 另一个问题是,当您返回到上一个视图控制器时,视图控制器的阴影会从导航堆栈中弹出。正如我之前所说的,通过运行简单的Xcode项目,您可以理解我的意思 回购: 有什么想法吗?我已经尝试为每个控制器设置背景图像,但这不是我想要的,因为这样图像“重叠”了前一个背景图像,而不是期望的效果 希望我解释得好 编辑1 问题似乎是由于iOS 7管理两个视图控制器之间转换的方式造成的。在第二个视图控制器中,尝试使用滑动手势转到上一个控制器时,您可以看到,当您开始该手势时,第一个控制器出现在第二个控制器(您看到的控制器)的下方,并且由于为整个iOS应用程序设置背景图像,ios,objective-c,cocoa-touch,ios7,uiimageview,Ios,Objective C,Cocoa Touch,Ios7,Uiimageview,我正尝试按照以下建议为整个应用程序设置背景图像: 但在iOS 7中(不知道其他版本),它根本不能正常工作。 我创建了一个简单的存储库,这样您就可以更好地了解正在发生的事情。 过渡过程中存在一些小故障 当您在第一个视图中点击一行时,第二个视图会被推入导航控制器,但会出现一种奇怪的效果。这似乎是由于透明度的影响。 另一个问题是,当您返回到上一个视图控制器时,视图控制器的阴影会从导航堆栈中弹出。正如我之前所说的,通过运行简单的Xcode项目,您可以理解我的意思 回购: 有什么想法吗?我已经尝试为每个控
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 saybackgroundColor:
中包含的所有UITableViews
设置外观,或者您可以使用常规外观方法为每个UIView
在你的应用程序中。谢谢大力水手,但这不是我的问题。我试图实现的是有一个固定的背景图像,保持在tableview下面。如果我为包含在中的具有外观的表视图设置背景图像:
,这与在每个视图控制器中设置背景图像相同。我不知道发生了什么,但在我的ios7中,此代码起作用了。您是否在repo中尝试过此代码?代码工作,我的意思是图像显示为背景。“问题”是按下/弹出控制器时的视觉效果,请参见编辑的答案。现在它已经用推/弹出控制器进行了测试&它工作得很好,我也做了同样的事情。你介意把你的测试项目推到一个repo或zip吗?如果它对你有帮助,那么接受我的Ans&不要放弃我的Ans