360度の大きなパノラマ画像を使用してiPhoneアプリを作成しています。パノラマは、UIScrollViewのCATiledLayerです。無限スクロール - setContentOffset:UIScrollViewの減速を停止します
イメージに無限スクロールを実装しようとしています(水平のみ)。私はUIScrollViewをサブクラス化し、setContentOffset:とsetContentOffset:animated:を実装することでこれを行いました。これは、ユーザーがscrollviewをドラッグしているときに完全に機能します。しかし、ユーザが指を離してスクロールビューが減速しているときに、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:(not setContentOffset:animated :)をオーバーライドするとこの問題は解決されますが、動作させるように見えません。
私もscrollRectToVisibleを試しました:アニメーション:成功なし。
この問題を解決する方法についてのアイデアは非常に高く評価されます。ありがとう!
EDIT: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%確信しているわけではありません。これがどのように機能するのか説明できますか? –
これは、説明した方法と同じように機能しますが、ユーザーが3倍幅パノラマをスクロールできないように減速を犠牲にするのではなく、パノラマを動かしています。したがって、ABCのコンテンツビューでは、スクロールビューにxxxABCxxxがあります(xは空白です)。左側に1つの画像幅をスクロールした後、xxABCxxxxを持つようにコンテンツビューを移動します。あなたがそれほど多くの「x」でそれをすることを除いて、彼らは端に達することを試みることについて非常に熟考しなければならないでしょう。それは理にかなっていますか? – hatfinch