Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS视差滚动效果(类似于Yahoo News Digest应用程序)_Ios_Yahoo_Parallax - Fatal编程技术网

iOS视差滚动效果(类似于Yahoo News Digest应用程序)

iOS视差滚动效果(类似于Yahoo News Digest应用程序),ios,yahoo,parallax,Ios,Yahoo,Parallax,我想知道如何实现视差滚动类似于雅虎新闻文摘应用程序。其中,当用户水平滚动时,背景图像以不同的速度滚动并启用分页 可能是他们用滚动视图和背景视图。不太确定。提示实现这样的滚动将是伟大的。我检查过类似的问题,但找不到我想要的答案。我以前用2个滚动视图做过这项工作 您有主细节滚动视图,然后是视差滚动视图(或任何您想要的位置) 然后,您将成为详细信息滚动视图的代理 在方法scrollView:didcroll中,您可以调整视差视图的滚动 如果你只是做x轴,那么你想要这样的东西 CGFloat detai

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


可能是他们用滚动视图和背景视图。不太确定。提示实现这样的滚动将是伟大的。我检查过类似的问题,但找不到我想要的答案。

我以前用2个滚动视图做过这项工作

您有主细节滚动视图,然后是视差滚动视图(或任何您想要的位置)

然后,您将成为详细信息滚动视图的代理

在方法
scrollView:didcroll
中,您可以调整视差视图的滚动

如果你只是做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);
这会将每个屏幕上的ScrollView内容偏移“百分比”设置为相同

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


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

答案如下。我从uitableview中将其子类化,以便可以重用数据并将其包装到uiview中

谢谢,
凯尔

100%工作,易于筑坝

在图像视图上查看图像视图的精确大小。 默认情况下,视图集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;
}

Swift 3

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

在ViewDidLoad()中:

及以下:

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)

}

可能重复:Yahoo应用程序是否有不同的滚动效果。顺便说一句,水平滚动的视差效果很好。它们还可以在垂直滚动上进行缩放。你介意在这方面给点提示吗。已接受答案。将x替换为y,将宽度替换为高度。差不多就是这样。实际上,我已经通过使用负contentOffset.y完成了垂直缩放,并将top scrollview/imageview的frame设置为gap加上垂直负滚动缩放的图像高度。在我的例子中,我在视差滚动视图上有按钮。我怎么知道按钮被点击了,因为这里的视差CrollView在后面,所以它不会占用用户的时间event@BabulPrabhakar你可以把滚动视图放在前面。或者您可以覆盖前视图上的hitTest:withEvent:方法。或禁用前视图上的触摸。或者在没有视差效果的情况下移动按钮。
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)

}