我想知道如何实现类似于Yahoo News Digest应用程序的视差滚动。当用户水平滚动背景图像时,以不同的速度滚动,启用分页。
可能是他们使用带有背景视图的ScrollView。不完全确定。提示实现这样的滚动会很棒。我检查了类似的问题,但找不到我想要的答案。
答案 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)
}