的减速我创建一个大的,360度,全景图像的iPhone应用程序。全景图是UIScrollView中的CATiledLayer。无限滚动 - setContentOffset:停止的UIScrollView
我正试图在图像上实现无限滚动(仅限水平方向)。和setContentOffset:动画:我已经通过继承的UIScrollView和实施setContentOffset做到了这一点,这完美的作品,当用户拖动滚动视图。但是,当用户抬起手指并且滚动视图正在减速时,更改contentOffset会使减速立即停止。
- (void)setContentOffset:(CGPoint)contentOffset
{
CGPoint tempContentOffset = contentOffset;
if ((int)tempContentOffset.x >= 5114)
{
tempContentOffset = CGPointMake(1, tempContentOffset.y);
}
else if ((int)tempContentOffset.x <= 0)
{
tempContentOffset = CGPointMake(5113, tempContentOffset.y);
}
[super setContentOffset:tempContentOffset];
}
有什么办法来改变contentOffset不影响减速?
建议使用here覆盖setContentOffset :(不是setContentOffset:animated :)解决了这个问题,但我似乎无法得到它的工作。
我也试过scrollRectToVisible:动画:没有成功。
任何想法如何解决这个问题将不胜感激。谢谢!
编辑:
代码scrollViewDidScroll:
-(void)scrollViewDidScroll:(PanoramaScrollView *)scrollView
{
[panoramaScrollView setContentOffset:panoramaScrollView.contentOffset];
}
我也试过这样:
-(void)scrollViewDidScroll:(PanoramaScrollView *)scrollView
{
CGPoint tempContentOffset = panoramaScrollView.contentOffset;
if ((int)tempContentOffset.x >= 5114)
{
panoramaScrollView.contentOffset = CGPointMake(1, panoramaScrollView.contentOffset.y);
}
else if ((int)tempContentOffset.x == 0)
{
panoramaScrollView.contentOffset = CGPointMake(5113, panoramaScrollView.contentOffset.y);
}
}
为了避免需要'UIScrollViewDecelerationFast',你可以使'contentSize'非常大,从你的三宽度内容视图和视点开始,并安排内容视图在滚动时重新定位;那么,当减速停止时,将所有的东西都放回到中间。 – hatfinch
@hatfinch感谢您的评论。这几乎是我最终做的,但我不能100%确定你的意思是“安排在滚动时重新定位内容视图”。你能解释这将如何工作? –
它会像您所描述的方法一样工作,除非不削弱减速以确保用户无法滚动三倍宽度全景,而是移动全景。因此,对于“内容视图”ABC,您在滚动视图中有xxxABCxxx(x仅为空白),并且当用户滚动例如在左侧滚动一个图像宽度后,移动内容视图,以便拥有xxABCxxxx。除了你用这么多'x'来做它,他们必须非常慎重地试图达到边缘。那有意义吗? – hatfinch