简介
以前 cocoa 开发者在应用程序首选项中管理键盘快捷键时使用了出色的框架 ShortcutRecorder。然而,它与 Xcode 4 的新插件架构不兼容。
MASShortcut 项目引入了一个现代的 API 和用户界面,用于录制、存储和使用系统级键盘快捷键。
特性
- 录制和显示键盘快捷键
- 监视快捷键并执行全局动作
- 优雅的、官方文档化的 API
- 可配置为与 Shortcut Recorder 兼容
- 既可以通过 CocoaPods 安装,也可以作为 Git 子模块安装
- 兼容 Mac App Store
- 支持 OS X 10.10 及以上版本
- 代码库带有测试,易于开发
部分完成
- 支持可访问性。已经有一些基本的可访问性代码,欢迎测试者提供反馈。
- 本地化。英语和捷克语的本地化应该是完整的,对于德语、法语、西班牙语、意大利语和日语提供基本支持。如果您是所提及其他语言的母语者,请测试本地化并报告问题或添加缺失的字符串。
欢迎 pull request :)
安装
您可以使用 CocoaPods,将以下行添加到您的 Podfile 中
pod 'MASShortcut'
如果您想坚持使用 1.x 分支,可以使用版本智能匹配运算符
pod 'MASShortcut', '~> 1'
您还可以通过 Carthage 安装,或者您可以使用 Git 子模块并手动链接 MASShortcut 框架。
要从命令行构建,请输入 'make release'。框架将在临时目录中创建,并在构建完成后在 Finder 中显示。
使用
希望,这真的很简单
#import <MASShortcut/Shortcut.h>
// Drop a custom view into XIB, set its class to MASShortcutView
// and its height to 19. If you select another appearance style,
// look up the correct height values in MASShortcutView.h.
@property (nonatomic, weak) IBOutlet MASShortcutView *shortcutView;
// Pick a preference key to store the shortcut between launches
static NSString *const kPreferenceGlobalShortcut = @"GlobalShortcut";
// Associate the shortcut view with user defaults
self.shortcutView.associatedUserDefaultsKey = kPreferenceGlobalShortcut;
// Associate the preference key with an action
[[MASShortcutBinder sharedBinder]
bindShortcutWithDefaultsKey:kPreferenceGlobalShortcut
toAction:^{
// Let me know if you find a better or a more convenient API.
}];
你可以在Demo目标中看到真实的使用示例。享受吧!
快捷键记录器兼容性
默认情况下,MASShortcut使用与快捷键记录器不兼容的用户默认存储格式。但是,很容易将其更改为这样,从而使你可以在不迁移之前由你的应用程序存储的快捷方式的情况下将快捷键记录器替换为MASShortcut。这个故事有两个部分
如果你将记录器控件(MASShortcutView)绑定到用户默认设置,请将接口构建中的值转换器字段设置为MASDictionaryTransformer。这确保 shortcuts 以快捷键记录器格式写入。
如果你使用MASShortcutBinder自动从用户默认设置中加载快捷方式,请相应地设置bindingOptions
[[MASShortcutBinder sharedBinder] setBindingOptions:@{NSValueTransformerNameBindingOption:MASDictionaryTransformerName}];
这确保快捷键记录器格式的快捷方式被正确加载。
通知
通过从NSUserDefaultsController注册KVO通知,你可以在用户更改快捷方式时获取回调,允许你执行任何UI更新或其他代码处理任务。
这也是很容易实现的
// Declare an ivar for key path in the user defaults controller
NSString *_observableKeyPath;
// Make a global context reference
void *kGlobalShortcutContext = &kGlobalShortcutContext;
// Implement when loading view
_observableKeyPath = [@"values." stringByAppendingString:kPreferenceGlobalShortcut];
[[NSUserDefaultsController sharedUserDefaultsController] addObserver:self forKeyPath:_observableKeyPath
options:NSKeyValueObservingOptionInitial
context:kGlobalShortcutContext];
// Capture the KVO change and do something
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)obj
change:(NSDictionary *)change context:(void *)ctx
{
if (ctx == kGlobalShortcutContext) {
NSLog(@"Shortcut has changed");
}
else {
[super observeValueForKeyPath:keyPath ofObject:obj change:change context:ctx];
}
}
// Do not forget to remove the observer
[[NSUserDefaultsController sharedUserDefaultsController] removeObserver:self
forKeyPath:_observableKeyPath
context:kGlobalShortcutContext];
在Swift项目中使用
#import <Cocoa/Cocoa.h>
#import <MASShortcut/Shortcut.h>
版权
MASShortcut遵循2条款BSD许可协议。