【问题标题】:iOS Parallax Scrolling effect (like in Yahoo News Digest app)iOS 视差滚动效果(如在 Yahoo News Digest 应用中)
【发布时间】:2014-07-28 06:57:10
【问题描述】:

我想知道如何实现类似于雅虎新闻文摘应用的视差滚动。其中,当用户水平滚动时,背景图像以不同的速度滚动并启用分页。

可能是他们使用带有背景视图的 ScrollView 来做到这一点。不完全确定。实现这种滚动的提示会很棒。我检查了类似的问题,但找不到我正在寻找的答案。

【问题讨论】:

标签: ios yahoo parallax


【解决方案1】:

我之前用 2 个滚动视图完成了此操作。

你有主要的细节滚动视图,然后是它后面的视差滚动视图(或任何你想要的地方)。

然后你成为详细滚动视图的代表。

scrollView:didScroll方法中,你可以调整视差视图的滚动。

如果你只是在做 x 轴,那么你想要这样的东西......

CGFloat detailMaxOffset = self.detailScrollView.contentSize.width - CGRectGetWidth(self.scrollView.frame);

CGFloat percentage = self.detailScrollView.contentOffset.x / maxOffset;

CGFloat parallaxMaxOffset = self.parallaxScrollView.contentSize.width - CGRectGetWidth(self.parallaxScrollView.frame);

[self.parallaxScrollView setContentOffset:CGPointMake(percentage * parallaxOffset, 0);

这会将滚动视图的内容偏移“百分比”设置为相同。

要获得视差效果,您只需使每个滚动视图的contentSize 不同。

如果视差滚动视图的内容大小比细节滚动视图大,它将滚动得更快。如果它的内容尺寸较小,滚动速度会变慢。

【讨论】:

  • 顺便说一句,这适用于水平滚动的视差效果。他们还对垂直滚动进行缩放。你也介意这方面的任何暗示吗?已经接受了答案。
  • 将 x 替换为 y,将宽度替换为高度。差不多就是这样。
  • 实际上我已经完成了垂直缩放,方法是使用负 contentOffset.y 并将顶部滚动视图/图像视图的框架设置为间隙加上图像高度以在垂直负滚动时缩放。
  • 就我而言,我在视差滚动视图上有按钮。我怎么知道该按钮已被点击,因为 parallaxScrollView 在后面,所以它不会占用用户事件
  • @BabulPrabhakar 你可以把滚动视图放在前面。或者您可以覆盖前视图上的 hitTest:withEvent: 方法。或禁用前视图上的触摸。或者移动没有视差效果的按钮。
【解决方案2】:

这就是答案。我从 uitableview 子类化它,以便数据可以重用并将其包装在 uiview 中。 https://github.com/michaelhenry/MHYahooParallaxView

谢谢, 凯尔

【讨论】:

    【解决方案3】:

    100% 工作且易于筑坝

    在 imageview 上查看图像视图的大小。 默认情况下,视图集 0 的 alpha。

    //MARK: Scroll View Delegate methods
    -(void)scrollViewDidScroll:(UIScrollView *)scrollView{
    
      NSLog(@"X: %f Y: %f",scrollView.contentOffset.x,scrollView.contentOffset.y);
    
    CGFloat scrollY = _mainScrollView.contentOffset.y;
    CGFloat height = _alphaView.frame.size.height;
    
    CGFloat alphaMonitor = scrollY/height;
    
    _alphaView.alpha = alphaMonitor;
    }
    

    【讨论】:

      【解决方案4】:

      斯威夫特 3

      以下是我如何在 Swift 3 中为 tvOS 应用程序中的垂直滚动获得视差效果。

      在 ViewDidLoad() 中:

          parallaxScrollView.delegate = self
          detailScrollView.delegate = self
      

      以下:

      override func viewDidLayoutSubviews() {
              self.detailScrollView!.contentSize = CGSize(width: 1920, height: 2700)
              self.parallaxScrollView?.contentSize = CGSize(width: 1920, height: 3000)
          }
      
      
      //// THE SCROLL VIEW
      
      func scrollViewDidScroll(_ scrollView: UIScrollView) {
      
          // Parallax effect
          let detailMaxOffset = self.detailScrollView.contentSize.height - self.detailScrollView.frame.height;
          let percentage = self.detailScrollView.contentOffset.y / detailMaxOffset
          let parallaxMaxOffset = self.parallaxScrollView.contentSize.height - self.parallaxScrollView.frame.height;
          let parallaxOffset = CGPoint(x:0,y:(percentage * parallaxMaxOffset))
          self.parallaxScrollView.setContentOffset((parallaxOffset), animated: false)
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多