我们再开发macOS客户端的时候会有修改鼠标箭头样式的需求,我们今天就解决问题,就是这个类NSCursor
,代码量比较少,直接上代码
核心思路:给当前类添加鼠标监听,然后修改鼠标样式
#import "SHButton.h"
@interface SHButton ()
@property (nonatomic , strong) NSTrackingArea *trackingArea;
@end
@implementation SHButton
-(void)updateTrackingAreas{
if (self.trackingAreas.count > 0) {
[self removeTrackingArea:_trackingArea];
}
NSTrackingAreaOptions options = NSTrackingMouseEnteredAndExited|NSTrackingActiveInKeyWindow;
_trackingArea = [[NSTrackingArea alloc] initWithRect:self.bounds
options:options
owner:self
userInfo:nil];
[self addTrackingArea:_trackingArea];
}
-(void)mouseEntered:(NSEvent *)theEvent{
[[NSCursor pointingHandCursor] set];
}
-(void)mouseExited:(NSEvent *)theEvent{
[[NSCursor arrowCursor] set];
}
@end
-
updateTrackingAreas
这个方法类似于我们iOS的layoutSubviews
调用频繁,所以需要清除之前的监听 - 下面的两个回调方法就不多解释了,是鼠标监听回调
-
[[NSCursor pointingHandCursor] set]
这里是修改鼠标样式的代码 - 鼠标的其它样式如下:
@property (class, readonly, strong) NSCursor *arrowCursor;
@property (class, readonly, strong) NSCursor *IBeamCursor;
@property (class, readonly, strong) NSCursor *pointingHandCursor;
@property (class, readonly, strong) NSCursor *closedHandCursor;
@property (class, readonly, strong) NSCursor *openHandCursor;
@property (class, readonly, strong) NSCursor *resizeLeftCursor;
@property (class, readonly, strong) NSCursor *resizeRightCursor;
@property (class, readonly, strong) NSCursor *resizeLeftRightCursor;
@property (class, readonly, strong) NSCursor *resizeUpCursor;
@property (class, readonly, strong) NSCursor *resizeDownCursor;
@property (class, readonly, strong) NSCursor *resizeUpDownCursor;
@property (class, readonly, strong) NSCursor *crosshairCursor;
@property (class, readonly, strong) NSCursor *disappearingItemCursor;
@property (class, readonly, strong) NSCursor *operationNotAllowedCursor API_AVAILABLE(macos(10.5));
@property (class, readonly, strong) NSCursor *dragLinkCursor API_AVAILABLE(macos(10.6));
@property (class, readonly, strong) NSCursor *dragCopyCursor API_AVAILABLE(macos(10.6));
@property (class, readonly, strong) NSCursor *contextualMenuCursor API_AVAILABLE(macos(10.6));
@property (class, readonly, strong) NSCursor *IBeamCursorForVerticalLayout API_AVAILABLE(macos(10.7));
NSCursor这个类还有其它的一些方法,这里就不罗列了,有感兴趣的小伙伴可以自行查阅
网友评论