NSTableView scrollRowToVisible(アニメーションあり)

私は、NSTableViewの上部とNSTableViewの下部にスクロールするアクションを実装しようとしています。私は scrollRowToVisible を使用していますが、アニメーション化するアクションが大好きです。これを行う方法はありますか?

7

4 答え

NSTableViewには直接スクロールできるスクロールプロパティはありませんが、代わりに、NSTableViewが存在するNSClipViewのスクロールを数学的にアニメートすることができます。

可能であれば、NSTableViewのカスタムサブクラス内でこれを行って、スムーズにrowIndexの行をアニメーション化してビューの中央にスクロールさせる方法を次に示します。

        NSRect rowRect = [self rectOfRow:rowIndex];
        NSRect viewRect = [[self superview] frame];
        NSPoint scrollOrigin = rowRect.origin;
        scrollOrigin.y = scrollOrigin.y + (rowRect.size.height - viewRect.size.height)/2;
        if (scrollOrigin.y < 0) scrollOrigin.y = 0;
        [[[self superview] animator] setBoundsOrigin:scrollOrigin];
22
追加された
少なくとも、LionのCore AnimationおよびCore Imageフィルターと組み合わされると、壊れたように見えます。私は動きがぼやけたNSTableViewをスクロールしようとしています。複数の画面をスクロールするときにコンテンツがペイントされません。
追加された 著者 Ivan Vučica,
恐ろしい私はこれを試してみましょう!
追加された 著者 keegan3d,
これは素晴らしい仕事でした!ここで私が思いついた、同じアイデアだが若干異なる最終的な方法です。また、ライオンのスクロールバーも点滅します: rel="nofollow noreferrer"> gist.github.com/1558664
追加された 著者 keegan3d,
これは私のNSTableViewの底まで確実にスクロールした唯一のコードです。唯一の警告は、NSDrawNinePartImage(歪みや画像の不具合)でうまく動作しなかったことです。私はNSImageViewsで独自の9つの部分画像メソッドを再開発するだけで終わり、完璧に動作します!
追加された 著者 rocky,
ここでも同じ問題。テーブルが空白になり、目的の行に近い行が所定の場所に移動します。スクロール中のテーブルビューの通常のレイアウトが壊れてしまい、リサイクルするためにビューが不足するようなものです。
追加された 著者 martinjbaker,

10.8+をターゲットにしていて、テーブルビューがレイヤーバックされている場合、これを行うことができます:

[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context){
    context.allowsImplicitAnimation = YES;
    [self.tableView scrollRowToVisible:someRow];
} completionHandler:NULL];
12
追加された
魅力的な作品!
追加された 著者 paulmelnikow,

簡単な方法はありませんが、NSAnimationをサブクラス化してアプローチすると、0.0から1.0に進むにつれてスクロール距離の合計を掛けてオフセットを取得し、scrollToPointを呼び出してスムーズなスクロールアクションを表示します。理論的にはうまくいくはずですが、私はスクロールビューがどのくらいうまく協力するかはわかりません。

2
追加された
setBoundsOrigin:を1秒間に60回呼び出すと、実際にNSTableViewの独自のカスタムスクロールメカニズムを実装し始めたときに、かなり素晴らしい結果が得られます。右の方のチップをありがとう。
追加された 著者 sudo rm -rf,

それは可能ではないようです。 NSTableViewは10.6までのアニメーションをサポートしていません。 MasOSX10.7から、いくつかのシンプルなアニメーションがクラスに追加されました。行の挿入、削除、移動を新しい位置にアニメートできます。これまでのところそれです。

2
追加された