4

スーパービューと同じ幅の UIScrollView があります。contentSize が非常に広く、水平方向にスクロールします。

デリゲート メソッド scrollViewWillEndDragging:withVelocity:targetContentOffset: を使用して targetContentOffset->x を負の値に設定しようとしています (つまり、コンテンツ領域の左端を画面の中央に近づけます)。

値の設定は機能しているように見えますが (NSLog は前後に変化を示します)、スクロールビューは変更された targetContentOffset を無視し、0 でスクロールを終了するようです。

-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
{
    NSLog(@"target: %@", NSStringFromCGPoint(*targetContentOffset));
    if (targetContentOffset->x <= 0.0)
    {
        targetContentOffset->x = -300;
    }

    NSLog(@"target: %@", NSStringFromCGPoint(*targetContentOffset));
}

この方法を使用してこれを実行できるかどうか、または別の方法で実行する必要があるかどうかを誰かが知っていますか?

4

1 に答える 1

0

contentInsetプロパティを操作することで、同様の問題を解決することができました。

Swift での例を次に示します。

func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
    // Determine threshold for dragging to freeze content at the certain position
    if scrollView.contentOffset.y < -50 {
        // Save current drag offset to make smooth animation lately
        var offsetY = scrollView.contentOffset.y
        // Set top inset for the content to freeze at
        scrollView.contentInset = UIEdgeInsetsMake(50, 0, 0, 0)
        // Set total content offset to preserved value after dragging
        scrollView.setContentOffset(CGPoint(x: 0, y: offsetY), animated: false)
        // Make any async function you needed to
        yourAsyncMethod(complete: {() -> Void in
            // Set final top inset to zero
            self.tripsTableView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0)
            // Set total content offset to initial position
            self.tripsTableView.setContentOffset(CGPoint(x: 0, y: -50), animated: false)
            // Animate content offset to zero
            self.tripsTableView.setContentOffset(CGPoint(x: 0, y: 0), animated: true)
        })
    }
}

水平スクロールに使用するように改善できます

于 2015-05-21T07:24:29.900 に答える