0

ユーザーが押す 2 つのボタンに基づいて上下にスクロールする をUITableView含む があります。UIImageView

UITableViewには、テーブル内のすべての行が表示されない画面上の可視領域があります。

一度UIImageViewに1行ずつ上下しますが、残念ながら、ユーザーに表示されていない行に移動すると画面から消えます。

私がやりたいことは、ユーザーがUIImageView画面外にある1行を上下に移動するたびに、テーブルを1行ずつ自動的に上下にスクロールさせることです。

最終的に、ユーザーがリストの最後に到達すると、ユーザーがテーブルの一番上にいる場合は、UIImageView一番下にUITableView移動します (つまり、一番最後の行に移動します)。つまり、 table を上にスクロールして、テーブルの最後の行を表示する必要があります。

逆もまた真である必要があります (つまり、UIImageViewがリストの一番下にある場合、下ボタンを押すと、ユーザーはテーブルの一番上に移動し、テーブルは自動的にリストの最初にスクロールする必要があります。テーブルの最初の行をユーザーに表示します)。

を移動するコードは次UIImageViewUITableViewとおりです。

- (IBAction)buttonClicked:(id)sender {

    if([sender tag] == 1){

        if (_index.row == 0) {

            _index = [NSIndexPath indexPathForRow:[_tableData count] - 1 inSection:_index.section];
            //here is my code that controls the scrolling of the table
            [_table scrollToRowAtIndexPath:_index atScrollPosition:UITableViewScrollPositionTop animated:YES];

        }

        else
            _index = [NSIndexPath indexPathForRow:_index.row - 1 inSection:_index.section];

        [UIView animateWithDuration:.3 animations:^{
            CGRect rect = [self.view convertRect:[_table rectForRowAtIndexPath:_index] fromView:_table];

            CGFloat floatx = _imageView.frame.origin.x - rect.origin.x;
            _imageView.frame = CGRectMake(rect.origin.x + floatx, rect.origin.y, _imageView.frame.size.width, _imageView.frame.size.height);
        }];

    }

    else if([sender tag] == 2){

        if (_index.row + 1 == [_tableData count]) {

            _index = [NSIndexPath indexPathForRow:0 inSection:_index.section];
            //here is my code that controls the scrolling of the table
            [_table scrollToRowAtIndexPath:_index atScrollPosition:UITableViewScrollPositionTop animated:YES];

        }

         else
             _index = [NSIndexPath indexPathForRow:_index.row + 1 inSection:_index.section];

        [UIView animateWithDuration:.3 animations:^{
            CGRect rect = [self.view convertRect:[_table rectForRowAtIndexPath:_index] fromView:_table];

            CGFloat floatx = _imageView.frame.origin.x - rect.origin.x;
            _imageView.frame = CGRectMake(rect.origin.x + floatx, rect.origin.y, _imageView.frame.size.width, _imageView.frame.size.height);
        }];

    }

}

ここで私が間違っていることを誰かが見ることができますか?

4

0 に答える 0