3

を使用してIKImageBrowserView画像のグリッドを表示しています。ポイントやオフセットを設定したり、プログラムで何かをスクロールしたりするコードはありません。画像でいっぱいのディレクトリの内容を一覧表示し、それらを画像ブラウザーに表示するコードを用意しただけです。

アプリケーションを起動すると、スクロール ビューは画像のグリッドの一番下までスクロールします。この後数秒間、マウスで上にスクロールしようとすると、スクローラーが誤動作し、引き続き下にスクロールしようとします。その後、問題は停止し、ユーザーは通常どおりスクロールできます。

El Capitan より前は、自動スクロールは行われませんでした。

繰り返しますが、 をスクロールしたり、 、 、 、 を設定したりするコードはありませNSSrcollViewん。contentOffsetscrollToRectscrollToVisibleRect

そうは言っても、画像が読み込まれた後にこれらの値を設定しようとしましたが、成功しませんでした。

質問 1: El Capitan (または Mac OS バージョン)で、NSScrollViewまたはEl Capitan でこれを経験した人はいますか?IKImageBrowserView

質問 2:これが発生する理由をデバッグする方法、またはスクロールを自動的に停止する方法はありますか?


解決

このソリューションは、私にとってはうまくいきました。コンセントを正しく接続してください。

.h

@interface WCSScrollView : NSScrollView

@end

.m

@class IKImageBrowserView;

@interface WCSScrollView ()
@property (strong) IBOutlet NSClipView * scrollerClipView;
@property (strong) IBOutlet IKImageBrowserView * imageBrowser;
@end

@implementation WCSScrollView

- (void)drawRect:(NSRect)dirtyRect {
    [super drawRect:dirtyRect];
}

- (void)resizeSubviewsWithOldSize:(NSSize)oldSize {
    NSClipView * clip = self.subviews[0];
    self.imageBrowser = (IKImageBrowserView*)clip.subviews[0];
}

@end

階層を表示

4

3 に答える 3

2

私はまったく同じ問題を抱えていましたが、Xamarin.MAC プロジェクトでした。私のプロジェクトは数か月間氷上に置かれ、その間にいくつかの Xamarin の更新があったため、その間にすべての Mac が El Capitan にアップグレードされたという事実を考えずに、Xamarin 関連の問題だと思いました。それで、あなたは私を正しい軌道に乗せました。最初は、Xamarin ImageKitDemo には問題がないと思っていましたが、IKImageBrowserView の HEIGHT が変更されるとすぐに、スクロールも開始されました。私のプロジェクトで実験した結果、同じ結果が得られました。高さが変更されるとすぐに(プログラムでウィンドウのフレームを設定するか、手動でウィンドウのサイズを変更して)スクロールが開始されます。

しばらく時間を費やした後、実際に私にとってうまくいく解決策を見つけました!

トリックは、NSScrollView をサブクラス化し、以下に示すように ResizeSubviewsWithOldSize() をオーバーライドすることのようです (Xamarin コードですが、obj-C への移植は簡単なはずです)。

    public override void ResizeSubviewsWithOldSize (System.Drawing.SizeF oldSize)
    {
        NSClipView clip = this.Subviews [0] as NSClipView;
        myIKImageBrowserView vw = clip.Subviews [0] as myIKImageBrowserView;

        RectangleF frame = vw.Frame;
        base.ResizeSubviewsWithOldSize (oldSize);
        vw.Frame = frame;
    }

したがって、基本的には、NSScrollView で ImageBrowserView のフレームを取得し、基本 (スーパー) 関数を呼び出してから、フレームサイズを元に戻します。Xamarin の ImageKitDemo は以前は動作していた El Capitan のバグに違いないため、コードの動作がおかしいだけではありません。

これがあなたの問題も解決することを願っています!

于 2015-11-15T15:07:11.210 に答える