【问题标题】:Xcode 5 - Swipe switch view with constant backgroundXcode 5 - 具有恒定背景的滑动切换视图
【发布时间】:2013-12-18 16:45:51
【问题描述】:

我了解如何实现 UISwipeGestureRecognizer,但我不了解如何正确使用多个视图与其协作。

我的最终目标是提供一个时尚的界面,可以使用按钮或滑动来更改视图。我希望一个恒定的背景而不是背景图像显示它再次转移到完全相同的图像。我目前正在使用情节提要,其中每个视图都有自己的控制器,并且我希望(如果可能)使其尽可能接近这种格式,以便直观地了解正在发生的事情。

我已经读过子视图可能是我对这种场景的最大希望(将它们保持在右侧直到调用滑动),但这会破坏我当前使用的故事板结构,并且肯定会破坏任何视觉效果明晰。

有人有什么建议吗?

【问题讨论】:

    标签: ios view storyboard uistoryboardsegue uiswipegesturerecognizer


    【解决方案1】:

    我以编程方式做了同样的事情,但您可以使用故事板实现同样的效果

    1。您需要保持相同背景的基本视图

    2。在基本视图控制器的 viewDidLoad 中添加 3 个视图(或 2 个,取决于您的要求)左、中、右透明背景,如下所示

    [self addChildViewController:myChildViewController];
    
    [myChildViewController view].frame = CGMakeRect(x,y,width,height);//Left one will have x = -320, y=0 ,Middle x= 0, y= 0, Right x = 32O etc.
    
     /* Add new view to source view */
     [self.view addSubview:[myChildViewController view]];
    
     /* Inform 'didMoveToParentViewController' to newly added view controller */
     [myChildViewController didMoveToParentViewController:self];
    

    3。在句柄 Swipe 方法中,使用动画更改视图帧,使其看起来像滑动页面 例如

    //swipe left, get right view in middle
     [UIView animateWithDuration:0.2 animations:^{
    
                CGRect frame = rightViewController.view.frame;
                frame.origin.x = 0;
                frame.origin.y = 0;
                rightViewController.view.frame = frame;
    
                CGRect middleViewFrame = middleViewController.view.frame;
                middleViewFrame.origin.x = -320;
                middleViewController.view.frame = middleViewFrame;
    
      }];
    

    【讨论】:

      【解决方案2】:

      您可以使用导航来执行此操作。如果您不想要导航栏,可以将其隐藏。您可以将左滑动手势识别器连接到下一个控制器的 segue,并将右滑动手势识别器连接到展开 segue(或从其操作方法调用 popViewControllerAnimated:)。如果您想要一个恒定的背景,那么您需要将其添加到导航控制器的视图(作为背景颜色),并让子视图控制器的视图透明(或部分透明)。导航控制器的根视图控制器中的这段代码将添加背景:

      - (void)viewDidLoad {
          [super viewDidLoad];
          self.navigationController.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"img.tiff"]];
      }
      

      【讨论】:

      • 谢谢,我将开始实施,如果/当我用这种方法成功时,我会投票。我对 iOS 相当陌生,所以可能需要一些时间。
      【解决方案3】:

      我确切地知道你在说什么,而且我实际上正在对我当前的项目做同样的事情。

      我通过使用 Interface Builder 和单个视图控制器来实现这一点。基本上我在视图中放置了一个 UIImageView 并将其设置为你想要的背景,然后我在它上面放置了一个透明的 UIScrollView。在该滚动视图中,我放置了我想要水平滚动的两个视图。

      不要忘记启用 UIScrollView 分页。就我而言,我有两个表视图。从第一个开始,如果您从右向左滑动,它将滚动到下一个表格视图,如果您从左向右滑动,它将滚动回第一个。

      【讨论】:

      • 我对这种方法的担忧是:您是否能够将变量从一个视图传递到另一个视图并像转场一样重新加载?我正在考虑重新加载信息的“焦点”。
      • 因为它是一个单一的视图控制器,你甚至不需要“传递”变量。 “刷新”数据的一种方法是通过读取 UIScrollView 的 .contentOffset 属性来确定当前显示的视图。通过这样做,您可以在当前显示的视图上操作数据
      猜你喜欢
      • 1970-01-01
      • 2019-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-16
      • 1970-01-01
      • 2013-03-25
      • 1970-01-01
      相关资源
      最近更新 更多