我不知道我是多么清楚或者上帝是否有可能,但无论如何我都会试着问。
我正在尝试创建一个应用程序,它看起来像一个网页,我将这些接口称为页面。
主窗口有7个链接到7页,每页有2-3页的链接。我使用的是导航控制器,一切都很完美,但有一点让我烦恼。
所有这些页面都具有相同的背景图像。当我在页面之间导航时,我可以看到背景图像的变化是正常的。但是在导航时看到背景图像的锐利边缘很烦人。我希望背景图像保持静止,并在导航时显示其他内容。
有解决问题的伎俩吗?使用故事板非常简单,所以你认为尝试替代解决方案的价值在这种情况下处理如此多的观点可能会很痛苦。(我知道这听起来很愚蠢,如果我希望它是完美的我应该努力工作。我jus想知道你们这些人做了什么。)
谢谢,
Alperen。
答案 0 :(得分:3)
我的工作是:
让每个视图控制器上的所有内容都在代码中有一个插座。当您关闭VC时,然后将所有这些内容设置为动画,使其具有0的alpha值。然后按下新VC,所有项目以alpha为0开始,并将它们设置为1。如果您拨打电话将其解除并推送VC没有动画,然后背景图像不会改变,并且看起来最后一个屏幕淡出而新的屏幕淡入,同时保持一致的背景。
这就是你要找的东西吗?
以下是一个更具体的例子:
假设我们有2个视图控制器,VC1和VC2。 VC1在帧的中心有一个大按钮(button1),当按下它时会调出VC2。 VC2只有一个后退按钮(button2),它将返回VC1。
我们从Interface Builder开始,我们将视图的背景图像设置为VC1和VC2中的相同图像。然后我们为每个VC添加一个按钮,并将它们连接到标题中的正确插座,并合成我们的.m文件中的属性。在界面构建器中,将每个按钮的alpha设置为零。它会消失,但它仍然存在,只是看不见。
我们还创建了一个方法,当用户按下每个按钮时,我将在VC1中调用firstButton,在VC2中调用backButton。将它们连接到button1和button2。
在我们编码之前,我们的按钮是不可见的。因此,当应用程序加载并且我们在屏幕上看到VC1时,我们需要按照以下方式为按钮的不透明度设置动画。如果您不熟悉动画语法,请不要担心,它非常简单。
- (void) viewDidAppear:(BOOL)animated {
// Animations
[UIView animateWithDuration:0.2 // How long the animation takes
delay:0 // Any once we hit this line of code before the animation takes place
options:UIViewAnimationCurveEaseInOut // Play around with this one to see what style of animation you want
animations:^{ // This is where we actually say what we want to animate. Make sure you use block syntax like I have here.
self.button1.alpha = 1;
}
completion:^ (BOOL finished){} // If you want to do something else after the animations are complete you can call that here.
];
}
就是这样!请注意,我在viewDidAppear方法中执行此操作,而不是viewDidLoad或viewWillAppear,因为这些在屏幕上显示任何内容之前发生,并且此时无法使用动画。
当用户点击VC1中的按钮时,我们需要将不透明度设置为0,然后将VC2推入堆栈。我们这与上一个动画几乎完全相同,但这次我们需要在完成块中更改为VC2。如果我们使用动画:NO调用,那么我们不会看到第一个视图滑出。由于背景图像相同,看起来我们仍然在同一个VC中。
- (void) firstButton {
VC2 *secondVC = [[VC2 alloc] initWithNibName:@"VC2"];
[UIView animateWithDuration:0.2
delay:0
options:UIViewAnimationCurveEaseInOut
animations:^{
self.button1.alpha = 0;
}
completion:^ (BOOL finished){ // Presenting the instance of VC2
[self.navigationController pushViewController:secondVC animated:NO];
}
];
}
现在我们已经完成了VC1的所有动画。我们需要将淡入效果复制到VC2的viewDidAppear方法(我不会再复制出来,但字面意思相同),以及backButton方法的代码,它与firstButton方法几乎完全相同,除了我们弹出视图控制器而不是推新视图控制器:
- (void) backButton {
[UIView animateWithDuration:0.2
delay:0
options:UIViewAnimationCurveEaseInOut
animations:^{
self.button2.alpha = 0;
}
completion:^ (BOOL finished){ // Removing the instance of VC2
[self.navigationController popViewControllerAnimated:NO];
}
];
}
这样清楚了吗?
答案 1 :(得分:0)
尝试适合您要求的其他实施方案。在普通视图的顶部使用UIScrollView。普通视图可以包含背景图像,UIScrollView可以包含页面。