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