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



我不知道如果可能的话,我能说得有多清楚,但无论如何我都会试着问。

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

主窗口有 7 个指向 7 个页面的链接

,每个页面有指向 2-3 个页面的链接。我使用导航控制器一切都很完美,但有一件小事困扰着我。

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

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

谢谢

阿尔佩伦。

我所做的是这样的:

使每个视图控制器上的所有内容在代码中都有一个出口。当您关闭 VC 时,请对所有这些内容进行动画处理,使其 alpha 为 0。然后推送新的 VC,所有项目都以 alpha 0 开头,并将它们动画化回 1。如果您调用关闭并推送 VC 的 NOT ANIMATED,则背景图像不会更改,并且看起来最后一个屏幕淡出,新屏幕淡入,同时保持一致的背景。

这就是你要找的吗?

下面是一个更具体的例子:

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

我们从界面生成器开始,我们将视图的背景图像设置为 VC1 和 VC2 中的相同图像。然后,我们为每个 VC 添加一个按钮,并将它们连接到标头中的适当插座,并在我们的 .m 文件中合成属性。在界面生成器中,将每个按钮的 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.
     ];
}

就是这样!请注意,我在 viewDidSeem 方法中执行此操作,而不是在 viewDidLoad 或 viewWillAppear 中执行此操作,因为这些发生在屏幕上显示任何内容之前,并且此时无法播放动画。

当用户点击 VC1 中的按钮时,我们需要将不透明度动画化回零,然后将 VC2 推送到堆栈上。我们这样做的方式几乎与上一个动画完全相同,但这次我们需要在完成块中更改为 VC2。如果我们使用 animated: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 的 viewDidSeem 方法(我不打算再次复制它,但它在字面上是相同的),并将代码复制到 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];
                     }
     ];
}

这能说明问题吗?

尝试符合您要求的其他实现。 在普通视图之上使用 UIScrollView。 普通视图可以包含背景图像,UIScrollView 可以包含页面。

相关内容

  • 没有找到相关文章