2

CollectionView セルにコンテンツを表示するために UICollectionView を使用するアプリを作成しています。ピンチ ジェスチャでは、コレクション ビューを再読み込みする必要があります。ピンチジェスチャーに応じてコンテンツの変更を処理できます。ここで、ピンチ ジェスチャの開始時に、コレクション ビューを再読み込みして、特定のインデックスまでスクロールする必要があります。そのために、次のように関数を呼び出しました。

[tempCollectionView reloadData];

[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(scrollToItem)  userInfo:nil repeats:YES];

[OR]
[self performSelector:@selector(scrollToItem) withObject:nil afterDelay:0.0];

- (void) scrollToItem 
{
    if (m_selectedCellIndex == -1) 
    {
        NSLog(@"cell return");
        return;
    }

    NSIndexPath *iPath = [NSIndexPath indexPathForItem:m_selectedCellIndex inSection:0];
    [tempLocalFilesCollectionView scrollToItemAtIndexPath:iPath atScrollPosition:UICollectionViewScrollPositionCenteredVertically animated:NO];

    LocalFilesCollectionViewCell *cell = (LocalFilesCollectionViewCell *) [m_tempLocalFilesCollectionView cellForItemAtIndexPath: iPath];
    if (cell) 
    {
        CGPoint p = [tempCollectionView convertPoint: cell.center fromView: tempCollectionView];
        NSLog(@"center: %f, %f,  %f, %f", cell.center.x, cell.center.y, p.x, p.y);
    }
    else 
    {
        NSLog(@"Not found");
    }
}

しかし、スクロールは機能しません。「無効なインデックス パスにスクロールしようとしました」というエラーでクラッシュします。tempCollectionView にスクロールできるセルがないことは明らかです。

リロードが完了した後、インデックス パスまでスクロールするにはどうすればよいですか? どんな助けでも素晴らしいでしょう!!

4

3 に答える 3

-1

垂直にスクロールしたい場合は、この非同期コードを試すことができます

dispatch_async(dispatch_get_main_queue(), ^{
    [_yourCollectionView reloadData];
    [_yourCollectionView reloadInputViews];
    [_yourCollectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:5 inSection:0] atScrollPosition:UICollectionViewScrollPositionCenteredVertically animated:YES];
});

と置き換えます

[_yourCollectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:5 inSection:0] atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:YES];

スクロールビューを水平にスクロールしたい場合

indexPathForRowinSectionの数をスクロール先の行番号に置き換えます。UITableViewUICollectionViewNSIndexPathは、しばしばinSection参照が付属していることを覚えておいてくださいNSInteger を NSIndexpath に変換します

于 2014-11-17T04:34:06.597 に答える