6

360度の大きなパノラマ画像を使用してiPhoneアプリを作成しています。パノラマは、UIScrollViewのCATiledLayerです。

画像に無限スクロールを実装しようとしています(水平のみ)。UIScrollViewをサブクラス化し、setContentOffset:とsetContentOffset:animated:を実装することでこれを行いました。これは、ユーザーがスクロールビューをドラッグしているときに完全に機能します。ただし、ユーザーが指を離してスクロールビューが減速している場合、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を変更する方法はありますか?

ここで、setContentOffset :( setContentOffset:animated :)をオーバーライドするとこの問題が修正されることが提案されましたが、動作させることができないようです。

また、scrollRectToVisible:animated:を試しましたが、成功しませんでした。

この問題を解決する方法についてのアイデアをいただければ幸いです。ありがとう!

編集:

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

4 に答える 4

4

それ以外の

[scrollView setContentOffset:tempContentOffset];

使用する

scrollView.contentOffset = tempContentOffset;
于 2016-03-31T19:23:11.013 に答える
2

回避策で問題を解決しました。パノラマの全幅が3つあるパノラマ画像を作成し(使用しているため、パフォーマンスにあまり影響しませんCATiledLayer)、decelerationRateプロパティをに設定しましたUIScrollViewDecelerationFast。したがって、ユーザーは減速が停止する前にスクロールしすぎることができず、左または右のパノラマ画像で減速が停止すると、コンテンツオフセットが中央の画像に戻されます。これは無限スクロールのように見え、私が思いついた最善の解決策です。

于 2012-07-13T02:01:20.090 に答える
1

私は最近、同じ無限スクロールを実行していて、誤って解決策を見つけました。

bounces=YESalwaysBounceHorizontal=YESまたは/およびを設定するだけalwaysBounceVertical=YESです(スクロールする方向によって異なります)。

それだけです、これは私のために働きます。:)

于 2014-01-19T16:57:20.317 に答える
0

UIScrollViewDelegateプロトコルメソッドを使用しようとします。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView;

ユーザーがスクロールすると呼び出されます(減速している場合でも)

その中で私はcontentoffsetを変更します

于 2012-05-01T18:59:31.997 に答える