0

必要なときにいつでも NSCursor を更新するにはどうすればよいですか? メソッドを実装しresetCursorRectsました。必要なサイズの画像を作成し(resetCursorRectsサイズはアプリのスライダーの値によって異なります)、その画像でカーソルを作成します。したがって、スライダー、魔女が必要なカーソルサイズを宣言し、変更されている場合、カーソルを更新する必要があります。したがって、論理的に考えれば、呼び出し[self resetCursorRects]は機能するはずですが、機能しません。スライダーの値を変更し、たとえばウィンドウのサイズを変更すると、カーソルが更新されます。しかし、呼び出そうとしても更新されないのはなぜですか?

4

2 に答える 2

3

システムカーソルのみを使用して、より単純なソリューションが必要な場合は、次のようにすることができます。

ビューのヘッダー ファイルで次のように宣言します。

NSCursor *currentCursor;

このメソッドを実装します。

- (void)resetCursorRects
{
    NSSize clientSize = self.frame.size;
    NSRect clientArea = {0, 0, clientSize.width, clientSize.height};
    [self addCursorRect:clientArea cursor:currentCursor];
}

カーソルを変更するには、次のようにします。

currentCursor = [NSCursor arrowCursor];
[self discardCursorRects];
[currentCursor set];

または、他のシステム定義カーソルを使用します。

于 2013-11-11T20:36:19.527 に答える
1

この目的のために、実装する必要があります

@property (nonatomic, retain) NSArray *cursors;

あなたの .h ファイルと次のようなもので:

- (void)loadCursors
{
    NSCursor *defaultCursor = [[NSCursor alloc] initWithImage:[NSImage imageNamed:DEFAULT_CURSOR] hotSpot:NSMakePoint(2, 0)];
    NSAssert(defaultCursor, @"defaultCursor failed to load");
    NSCursor *clickedCursor = [[NSCursor alloc] initWithImage:[NSImage imageNamed:CLICKED_CURSOR] hotSpot:NSMakePoint(2, 0)];
    NSAssert(clickedCursor, @"clickedCursor failed to load");
    NSCursor *draggingCursor = [[NSCursor alloc] initWithImage:[NSImage imageNamed:DRAGGING_CURSOR] hotSpot:NSMakePoint(17, 2)];
    NSAssert(draggingCursor, @"draggingCursor failed to load");

    self.cursors = [NSArray arrayWithObjects:defaultCursor, clickedCursor, draggingCursor, nil];

    [defaultCursor release];
    [clickedCursor release];
    [draggingCursor release];

    [self resetCursorRects];
}

- (void)setCursor:(NSUInteger)cursorIndex
{
    [self discardCursorRects];

    [self addCursorRect:self.bounds cursor:[self.cursors objectAtIndex:cursorIndex]];
    [(NSCursor *)([self.cursors objectAtIndex:cursorIndex]) set];
}

- (void)resetCursorRects
{
    [self setCursor:CursorTypeDefault];
}

これらのメソッドを次のように使用します。

- (void)mouseDown:(NSEvent *)theEvent
{    
    [self setCursor:CursorTypeClicked];
}

またはあなたが望む場所。

カーソルで Enum を実装し、init メソッドでカーソルをロードすることを忘れないでください!

お役に立てれば。

于 2012-10-02T18:30:26.167 に答える