iOS视差滚动效果(如雅虎新闻摘要应用)

时间:2014-07-28 06:57:10

标签: ios yahoo parallax

我想知道如何实现类似于Yahoo News Digest应用程序的视差滚动。当用户水平滚动背景图像时,以不同的速度滚动,启用分页。

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

4 个答案:

答案 0 :(得分:21)

我之前用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);

这将设置scrollviews内容偏移"百分比"每个人都一样。

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

如果视差滚动视图的内容大小比详细滚动视图大,则滚动速度会更快。如果内容大小较小,则滚动速度会较慢。

答案 1 :(得分:11)

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

谢谢, KEL

答案 2 :(得分:0)

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;
}

答案 3 :(得分:0)

Swift 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)

}