第一个Mac程序——倒计时v1v2
先放效果图:
这是我第一次尝试在Mac平台下编程,之前学过几天IOS开发,一直在等MJ老师更新。闲下来不编程不舒服,给自己,也给老婆编了这个以提醒自己好好学习。v2版加入了各种倒计时。改进了界面。把倒计时计算抽成了一个类,提高程序的复用性。
-概览
首先放上xib界面图
-改界面名字
建项目的过程中一开始不小心取了个没有远见的名字“考研倒计时”,后来改成了倒计时。怎么改呢?我是这样改的:(比如程序的window,上面的menuitem类同)
顺手把Resize的钩钩去掉
把Full Screen改成Primary Window蛮有意思的。(试试把Resize勾上再全屏)
-拖入控件
这里我一开始只拖进去这5句话(NSTextField),双击控件先把文字改个样子做个效果。在右边顺便把字体改了。
后来如图又加入了一个NSImageView 以作背景
在Attribute Inspector中改成我事先找好的图,并把Scaling改成AxesIndependently 这样图片就可以适当的放缩了。
-代码&优化
一开始我的代码是这样的,后来又加了纪念日、软考等,代码是直接“拷贝”复用的。
#pragma mark - 设置 -
NSDateComponents *components=[[NSDateComponents alloc]init];//创建组件
#pragma mark 考研
[components setMonth:1];
[components setDay:4];
[components setYear:2015];
[components setHour:7];
NSDate *targetDate = [[NSCalendar currentCalendar] dateFromComponents:components];
NSTimeInterval targetInteval = [targetDate timeIntervalSinceNow];
// NSLog(@"%f",KYinteval);
NSLog(@"%d",(int)targetInteval/60/60/24);
[_KYLabel setStringValue:[NSString stringWithFormat:@"距离考研还有%d天!",(int)targetInteval/60/60/24]];
v2版把倒计时计算抽成了一个类,提高程序的复用性。
用法如下:(使用了Delegate思想和静态实例化思想)
ZZYDateCounter*dc=[ZZYDateCounter CounterWithTargetYear:2015mounth:1day:4hour:7andSentence:@"距离考研还有%d天!"];
dc.textDelegate=_KYLabel;
[dc say];
ZZYDateCounter源代码如下:(提供了使用NSDate初始化和直接使用年月日小时直接初始化的两个接口,为以后的扩展预留接口)
//
// ZZYDateCounter.h
// 考研倒计时
//
// Created by 张泽阳 on 3/14/14.
// Copyright (c) 2014 张泽阳. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface ZZYDateCounter : NSObject
@property NSTextField* textDelegate;
-(void)say;
+(ZZYDateCounter*)CounterWithTargetDate:(NSDate*)targetDate andTargetSentence:(NSString*)targetSentence;
+(ZZYDateCounter*)CounterWithTargetYear:(int)y mounth:(int)m day:(int)d hour:(int)h andSentence:(NSString*)targetSentence;
@end
//
// ZZYDateCounter.m
// 考研倒计时
//
// Created by 张泽阳 on 3/14/14.
// Copyright (c) 2014 张泽阳. All rights reserved.
//
#import "ZZYDateCounter.h"
@implementation ZZYDateCounter{
NSDateComponents *components;
NSString* counterSentence;
NSTimeInterval targetInteval;
NSDate *targetDate ;
}
-(id)init{
if (self=[super init]) {
components=[[NSDateComponentsalloc]init];//创建组件
}
returnself;
}
-(id)initWithDate:(NSDate*)date andSentence:(NSString*)sentence{
if ((self=self.init)) {
// form http://blog.sina.com.cn/s/blog_8732f19301010fxd.html
// NSDate 相互转换
//
// NSDateComponents *comps = [[NSDateComponents alloc] init];
//
// [comps setDay:6];
//
// [comps setMonth:5];
//
// [comps setYear:2004];
//
// NSCalendar *gregorian = [[NSCalendar alloc]
//
// initWithCalendarIdentifier:NSGregorianCalendar];
//
// NSDate *date = [gregorian dateFromComponents:comps];
//
// [comps release];
//
// NSDateComponents *weekdayComponents =
//
// [gregorian components:NSWeekdayCalendarUnit fromDate:date];
//
// int weekday = [weekdayComponents weekday];
NSCalendar *gregorian = [[NSCalendar alloc]
initWithCalendarIdentifier:NSGregorianCalendar];
components=[gregorian components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit |NSHourCalendarUnitfromDate:date];
counterSentence=[NSString stringWithString:sentence];
} ;
returnself;
}
-(void)say{
targetDate = [[NSCalendarcurrentCalendar] dateFromComponents:components];
targetInteval = [targetDatetimeIntervalSinceNow];
if (targetInteval<0) {
targetInteval=-targetInteval;
}
[_textDelegatesetStringValue:[NSStringstringWithFormat:counterSentence,(int)targetInteval/60/60/24]];
}
-(id)initWithYear:(int)y mounth:(int)m day:(int)d hour:(int)hour andSentence:(NSString*)sentence{
if ((self=self.init)) {
[components setMonth:m];
[components setDay:d];
[components setYear:y];
[components setHour:hour];
counterSentence=[NSString stringWithString:sentence];
}
returnself;
}
+(ZZYDateCounter *)CounterWithTargetDate:(NSDate *)targetDate andTargetSentence:(NSString *)targetSentence{
ZZYDateCounter* counter = [[ZZYDateCounteralloc] init];
return [counter initWithDate:targetDate andSentence:targetSentence];
}
+(ZZYDateCounter*)CounterWithTargetYear:(int)y mounth:(int)m day:(int)d hour:(int)h andSentence:(NSString *)targetSentence{
ZZYDateCounter* counter = [[ZZYDateCounteralloc] init];
return [counter initWithYear:y mounth:m day:d hour:h andSentence:targetSentence];
}
@end
在AppDelegate中添加下面两个方法:
//关闭Window后退出程序
-(BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender{
NSLog(@"ttt");
returnYES;
}
//当然少不了彩蛋了!
- (IBAction)onAboutClicked:(NSMenuItem *)sender {
NSAlert *alert = [NSAlertalertWithMessageText:@"关于这个软件"defaultButton:@"我也爱你" alternateButton:nilotherButton:nilinformativeTextWithFormat:@"为我家亲爱的编写,祝我们都能考上好研究生,一辈子在一起!\n永远爱我家文儿!"];
[alert beginSheetModalForWindow:_windowcompletionHandler:nil];
}
最后,别忘了
设置为开机自启:)
心得体会:
Mac下开发果然特别舒服,和IOS一脉相承。了解了NSImageView和NSTextView和NSWindow 等控件。
计划以后继续深入了解如:
改变部分字体颜色和文字大小、
改进NSWindow的外观、
使用快捷键进出全屏
等。
还有,感觉排版很渣。。。MarsEdit还不是很熟。。继续努力!
转载于:https://www.cnblogs.com/zeyang/p/3601340.html
第一个Mac程序——倒计时v1v2相关推荐
- 第一个 mac 程序 Create-JSON-Model
第一个 mac 程序 Create-JSON-Model 效果图 数据 {"ID":null,"name":"Doe","firs ...
- 苹果笔记本python开发第一个程序_Xcode的第一个mac程序
今天是第一次用Xcode,什么都不会,对于像我这种从windows c++转mac c++/obj-c/python的人,对mac下的编程可以说是一点都不了解,这篇文章也从零开始写起,记录我的coco ...
- Mac M1Pro芯片,新手从安装jdk到第一个Java程序详细指南(2022年10月)
因为是一个新手,什么都不懂的,遇到一个命令行都要去查去理解,所以常见坑我都会说明,针对小白非常友好.()里的是扩展知识,可以不看 下文不包含下载常见的代码编辑器,可以做完二配置JDK环境,就去参考别的 ...
- mac安装golang,编写第一个go程序
一:下载pkg包,官网经常打不开,这里从云盘中下载 二:然后安装,一直next,命令行输入go version 或 go env如下说明成功 三:编写第一个go程序,新建hellow.go文件 pac ...
- Go:分布式学习利器(1) -- 开发环境搭建 + 运行第一个go程序
文章目录 为什么要学习 go 开发环境搭建 -- MAC 运行第一个go程序 go 函数的返回值设置 go 函数的命令行参数 为什么要学习 go 在如下几个应用场景的需求下产生了go: 超大规模分布式 ...
- 【转】Mac 程序员的十种武器
http://chijianqiang.baijia.baidu.com/article/3733 上 在写 Mac 程序员的十个武器之前,我决定先讲一个故事,关于 Mac 和爱情的.(你们不是问 M ...
- 小程序工程化实践(上篇)-- 手把手教你撸一个小程序 webpack 插件,一个例子带你熟悉 webpack 工作流程...
本文基于 webpack 4 和 babel 7,Mac OS,VS Code 小程序开发现状: 小程序开发者工具不好用,官方对 npm 的支持有限,缺少对 webpack, babel 等前端常用工 ...
- C语言 03-第一个C程序代码分析
本文目录 一.代码分析 二.开发和运行C程序的步骤 三.总结 说明:这个C语言专题,是学习iOS开发的前奏.也为了让有面向对象语言开发经验的程序员,能够快速上手C语言.如果你还没有编程经验,或者对C语 ...
- Creating Your First Mac App--创建你的第一个Mac应用
Back to Jump Right In About Creating Your First Mac App 关于创建你的第一个Mac 应用 Your First Mac App introduce ...
- Python学习札记(二) python3.5安装 + (假装是)第一个Python程序
参考: Mac OS 安装 Python3.5 廖雪峰Python教程:安装Python 笔记: 安装: 1.官方网站下载安装包:安装程序 2.执行安装程序完成Python3.5包的安装. 3.安装P ...
最新文章
- 力扣:13罗马数字转整数(python)
- 微信小程序-地图组件(map)的使用
- java 文本查找_Java基于正则表达式实现查找匹配的文本功能【经典实例】
- 拆解食饮新消费品牌的增长密码
- python优雅编程_Python优雅编程——Collections模块中的高性能数据类型
- mysql创建表时外连接_4.mysql数据库创建,表创建模等模板脚本,mysql_SQL99标准的连接查询(内连接,外连接,满外连接,交叉连接)_MySQL...
- SYN Flood攻击及防御方法 (转)
- 使用VUE实现的数独游戏
- 基于中国新能源汽车税收政策下成都市场发展路线研究
- 最新USDT支付系统+支持ERC20/OMNI/代理商/第三方API
- 科学计算机反导按键,backspace是哪个键?最实用按键的大 揭秘
- SpringMv的IOC控制反转以及DI依赖注入(SpringMvc⑨)
- 用canvas和原生JS写的一个flappy bird游戏
- 直连附加存储服务器,直接连接存储
- 孤单还是对你最好的惩罚
- C++使用CreateProcess执行cmd命令(实例演示)
- 解决Eclipse打开某个workspace报错:The project description file (.project) for (项目名)
- webdav使用mysql_WebDAV Client
- 【高并发趣事二】——JMM及程序中的幽灵
- 作文 深海机器人_海底机器人作文500字