Ios 导航页面中的相同背景图像

Ios 导航页面中的相同背景图像,ios,xcode,controller,navigation,Ios,Xcode,Controller,Navigation,如果可能的话,我不知道我能说得多清楚,或者说我能说得多清楚,但我还是会尽量问的 我正在尝试制作一个应用程序,它看起来像一个网页,我将把界面称为网页 主窗口有7到7页的链接,每个页面有到2-3页的链接。我使用的导航控制器一切都很完美,但有一点让我感到困扰 所有这些页面都有相同的背景图像。当我从一页导航到另一页时,我可以看到背景图像的变化,这是正常的。但是,在导航时看到背景图像的锐利边缘很烦人。我希望背景图像保持静止,导航时其他内容显示在其上 有办法解决我的问题吗?使用故事板非常简单,所以你认为值得

如果可能的话,我不知道我能说得多清楚,或者说我能说得多清楚,但我还是会尽量问的

我正在尝试制作一个应用程序,它看起来像一个网页,我将把界面称为网页

主窗口有7到7页的链接,每个页面有到2-3页的链接。我使用的导航控制器一切都很完美,但有一点让我感到困扰

所有这些页面都有相同的背景图像。当我从一页导航到另一页时,我可以看到背景图像的变化,这是正常的。但是,在导航时看到背景图像的锐利边缘很烦人。我希望背景图像保持静止,导航时其他内容显示在其上

有办法解决我的问题吗?使用故事板非常简单,所以你认为值得尝试另一种解决方案吗?在这种情况下,处理这么多视图可能会很痛苦。(我知道这听起来很愚蠢,如果我想让它完美,我应该做艰苦的工作。我只是想知道你们会做什么)

谢谢


Alperen.

尝试适合您需求的不同实现。在普通视图的顶部使用UIScrollView。普通视图可以包含背景图像,UIScrollView可以包含页面。

请尝试适合您需求的其他实现。在普通视图的顶部使用UIScrollView。普通视图可以包含背景图像,UIScrollView可以包含页面。

我要做的是:

使每个视图控制器上的所有内容在代码中都有一个出口。当你解散一个VC,然后动画所有这些东西有一个阿尔法为0。然后按下新的VC,所有项目的alpha值均为0,并将其动画设置回1。如果你打电话取消并按下VC的未设置动画,那么背景图像不会改变,最后一个屏幕会淡出,新屏幕会淡入,同时保持背景一致

这就是你要找的吗

这里有一个更具体的例子:

假设我们有两个视图控制器,VC1和VC2。VC1在框架的中心有一个大按钮(按钮1),按下时会弹出VC2。VC2只有一个返回按钮(按钮2),它将使我们返回VC1

我们从Interface Builder开始,将视图的背景图像设置为VC1和VC2中的相同图像。然后我们在每个VC中添加一个按钮,将它们连接到标题中的适当出口,并在.m文件中合成属性。在interface builder中,将每个按钮的alpha设置为零。它会消失,但它仍然存在,只是看不见

我们还为用户按下每个按钮创建了一个方法,我将在VC1中调用firstButton,在VC2中调用backButton。把它们挂在按钮1和按钮2上

除非我们以其他方式编码,否则我们的按钮是看不见的。因此,当应用程序加载,我们看到屏幕上的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.
     ];
}
就这样!请注意,我是在ViewDidDisplay方法中执行此操作的,而不是viewDidLoad或ViewWillDisplay,因为这些操作发生在屏幕上显示任何内容之前,此时不可能进行动画

当用户点击VC1中的按钮时,我们需要将不透明度设置为零,然后将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的ViewDidAspect方法(我不打算再次复制,但实际上是一样的),代码是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];
                     }
     ];
}
这会把事情弄清楚吗?

我做的是:

使每个视图控制器上的所有内容在代码中都有一个出口。当你解散一个VC,然后动画所有这些东西有一个阿尔法为0。然后按下新的VC,所有项目的alpha值均为0,并将其动画设置回1。如果你打电话取消并按下VC的未设置动画,那么背景图像不会改变,最后一个屏幕会淡出,新屏幕会淡入,同时保持背景一致

这就是你要找的吗

这里有一个更具体的例子:

假设我们有两个视图控制器,VC1和VC2。VC1在框架的中心有一个大按钮(按钮1),按下时会弹出VC2。VC2只有一个返回按钮(按钮2),它将使我们返回VC1

我们从Interface Builder开始,将视图的背景图像设置为VC1和VC2中的相同图像。然后我们在每个VC中添加一个按钮,将它们连接到标题中的适当出口,并在.m文件中合成属性。在interface builder中,将每个按钮的alpha设置为零。它会消失,但它仍然存在,只是看不见

我们还为用户按下每个按钮创建了一个方法,我将在VC1中调用firstButton,在VC2中调用backButton。把它们挂在按钮1和按钮2上

除非我们以其他方式编码,否则我们的按钮是看不见的。因此,当应用程序加载,我们看到屏幕上的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.
     ];
}
就这样!请注意,我是在ViewDidDisplay方法中执行此操作的,而不是viewDidLoad或ViewWillDisplay,因为这些操作发生在屏幕上显示任何内容之前,并且在该点不可能进行动画