1.先展示一下效果图:
1.1 四方格图标就是菜单栏APP
1.2 点击后的显示图,里面已经被我加载了一下APP,当点击这些APP的时候,会打开对应的APP.
1.3 当点击”+/-“按键的时候,可以打开APP添加删除界面 ,如果需要添加APP,把APP拉到界面中,它会自动添加到表格里,如果需要移除APP,选中需要移除APP的那一行,再点击移除按键”-“就可以移除APP。在添加和移除后,记得保存一下,然后关闭这个界面,点击“Exit”按键退出BasketAPP,重新打开完成加载。
2.BasketAPP的作用:
将需要用到的APP添加到里面,方便使用,但有人要说了,不是有程序坞吗?是的,但那是放更重要的APP的地方,BasketAPP可以放一些工具类的APP,这也是它开发出来的意义所在。可能又有人要问了,它是不是只能放6个APP?回答是:NO,界面的大小最优是6个,但可以一直往下叠加,只要你不下麻烦。因为是临时的想法,所以用了一两天的时候找了一些资料开发出来的,嗯,也可以通俗的来讲,就是为了好玩。
3.功能模块的实现(需要用到的技能)
3.1 首先需要用到Objective-C语言和X-code工具,其次需要用到PS去P一个图标出来,当然,从网上找也行,但PS会更随心一点。
3.2 菜单栏图标的实现:
3.2.1 新建一个项目
名称自己填
3.2.2 在项目运行的时候,需要把桌面显示的界面去掉,已经去掉程序坞中的界面,因为我们只想保留菜单栏上的图标
先把图标右上角的 Is Initital Controller点掉,
在info中添加Application is agent (UIElement),将其值设为YES
目前运行起来,程序是没有界面的,也没有在程序坞中生产图标,但现在还没有菜单栏的图标,下一步需要生成菜单栏图标
3.2.3 生成菜单栏
点击Assets.xcassets,在左下角点击+号图标,添加Image Set,将其命名为setting,将图标拉到1x中,图标的大小是18像素*18像素
最后一步,在AppDelegate中添加下面的代码
#import "AppDelegate.h"
#import <AppKit/AppKit.h>
@interface AppDelegate ()
@property(nonatomic, strong)NSStatusItem *ToolsItem;
@end
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// Insert code here to initialize your application
//创建菜单栏图标
self.ToolsItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];
NSImage *image = [NSImage imageNamed:@"setting"];
[self.ToolsItem.button setImage:image];
}
- (void)applicationWillTerminate:(NSNotification *)aNotification {
// Insert code here to tear down your application
}
再次运行就发现菜单栏中有对应的图标啦,但仅仅有图标还是不行的,需要点击它有下拉框
3.3 菜单栏图标添加下拉视图的实现:
要实现下拉视图,需要用到NSPopover视图
3.3.1 先添加一个View的Controller类,把创建XIB视图勾选上
3.3.2 把AppDelegate.m里面的代码换成下面的代码:
#import "AppDelegate.h"
#import <AppKit/AppKit.h>
#import "ToolsPopverController.h"
@interface AppDelegate()
@property(nonatomic, strong)NSStatusItem *ToolsItem;
@property(nonatomic, strong)NSPopover *popover;
@end
@interface AppDelegate ()
@end
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// Insert code here to initialize your application
//创建菜单栏图标
self.ToolsItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];
NSImage *image = [NSImage imageNamed:@"setting"];
[self.ToolsItem.button setImage:image];
//创建弹窗
_popover = [[NSPopover alloc]init];
_popover.appearance = [NSAppearance appearanceNamed:NSAppearanceNameAqua];
//[NSAppearance appearanceNamed:NSAppearanceNameAccessibilityHighContrastVibrantLight];
//绑定弹窗视图
_popover.contentViewController = [[ToolsPopverController alloc]initWithNibName:@"ToolsPopverController" bundle:nil];
_popover.behavior = NSPopoverBehaviorTransient;
//self.ToolsItem.target = self; -- 该方法已经弃用
self.ToolsItem.button.action = @selector(showMyPopover:);
}
- (void)applicationWillTerminate:(NSNotification *)aNotification {
// Insert code here to tear down your application
}
- (void)showMyPopover:(NSStatusBarButton *)button {
[_popover showRelativeToRect:button.bounds ofView:button preferredEdge:NSRectEdgeMaxY];
[self.popover.contentViewController.view.window makeFirstResponder:self.popover.contentViewController.view.window];
}
@end
再次运行生成菜单栏后,点击图标就可以有下拉视图
3.3 添加功能到下拉视图中:(因人而异,就不细说了)
正常来说只需要在视图中添加一个NSButton按键,把Button按键连到对应的APP就可以了,打开链接的APP可以调用终端中的open命令。如果想把它弄得更好,可以做更多的尝试。记得添加一个退出的按键,要不没办法关闭APP.
4.我的想法以及最终的实现
最开始的时候我只是固定几个Button按键,链接固定几个APP,但这样太死板了,于是我添加了一个plist,把APP的名称和APP的路径添加到这个plist里面,这样就可以通过右键打开包内容来更改里面的plist。
后面又想了一下,我的视图不能太大,两行三列,只能放六个,但这样不行,我需要放更多的APP,所以我在视图中又添加了一个NSScrollView视图,把APP放到里面,这涉及到一个问题,就是不能固定拉几个Button按键到视图中,需要代码自动生成button按键,而且每个的位置需要处理一下,当添加APP的时候,自动往下生成一个button按键,代码参考如下:
self.ScrollView.hasVerticalScroller = NO;
self.ScrollView.hasHorizontalScroller = NO;
if (configArray.count>4) {
[self.ContentView setFrame:NSMakeRect(0, 35, 314, xArray.count*(32+10))];
}
for (int i=0; i<xArray.count; i++) {
NSString *name = [xArray[i] objectForKey:@"name"];
if (i==0) {
NSButton *button = [[NSButton alloc]initWithFrame:NSMakeRect(14, _ContentView.frame.size.height-32, 124, 32)];
button.title = name;
button.bezelStyle = NSBezelStyleRegularSquare;
button.action = @selector(buttonAction:);
[self.ContentView addSubview:button];
}else {
NSButton *button = [[NSButton alloc]initWithFrame:NSMakeRect(14, _ContentView.frame.size.height-32*(i+1)-10*i, 124, 32)];
button.title = name;
button.bezelStyle = NSBezelStyleRegularSquare;
button.action = @selector(buttonAction:);
[self.ContentView addSubview:button];
}
}
for (int i=0; i<yArray.count; i++) {
NSString *name = [yArray[i] objectForKey:@"name"];
if (i==0) {
NSButton *button = [[NSButton alloc]initWithFrame:NSMakeRect(157, _ContentView.frame.size.height-32, 124, 32)];
button.title = name;
button.bezelStyle = NSBezelStyleRegularSquare;
button.action = @selector(buttonAction:);
[self.ContentView addSubview:button];
}else {
NSButton *button = [[NSButton alloc]initWithFrame:NSMakeRect(157, _ContentView.frame.size.height-32*(i+1)-10*i, 124, 32)];
button.title = name;
button.bezelStyle = NSBezelStyleRegularSquare;
button.action = @selector(buttonAction:);
[self.ContentView addSubview:button];
}
}
这样的话,可以一直往plist里面添加APP了,到这里已经可以告一段落了
但是!!!我不满足呀,我需要傻瓜式操作,不需要右键打开包去改里面的plist来添加和删除视图,于是,我在下拉视图中添加了一个”+/-“按键,这个按键可以打开另外一个视图,这个视图可以用来添加APP,视图的话,可以看上面的第三张图,我往table中添加的时候,相对应的添加到plist中,修改plist,同样会在table中显示当前的app,把table和plist关联起来了,这样修改方便多了。
目前还有个不是问题的问题,就是添加或者删除APP后,需要退出BasketAPP,再次打开才行。
最后说一句:打字好累呀!~o~
2021年11月5号
前段时间兴趣使然,更改了该APP,把之前遗留的问题处理了一下,顺便添加一些新功能。
1.之前在添加/删除后需要退出BasketAPP,现在不需要了
2.添加了电脑开机自启的功能,当勾选这个功能后,电脑开机,软件自动打开
3.添加了备份所选APP功能,这个功能主要是防止连接的APP因为挪动位置导致从BasketAPP界面打不开
如果需要体验:菜单栏程序坞安装包.dmg-其它文档类资源-CSDN文库
今天的文章程序坞与菜单栏_安卓任务栏app[通俗易懂]分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/85068.html