曾经写的(渣)天气预报项目

整理资料发现自己当初的练手项目,稍微勾起一些并不是很美好的回忆,与项目无关,与自己当时的生活状态有关。万幸现在挺过来了。


项目效果预览.gif

运行后的效果是上图这样的……


一口老血.jpg

老实说回头再看这个效果图总觉得自己该吃药了或者药吃多了…….

嗯,我知道配色和图片什么的都丑到爆
当初就就是报着练练手的心态去写的。
一位前辈跟我说过:“如果自己想写点什么,但是又没有什么好点子,就去写个天气吧 ”
但不知道为什么,做到后来就慢慢发展为我个人的恶趣味了……
页面逻辑很简单,图标素材基本都是从http://www.easyicon.net/
上挖下来的,
比如:

WeatherIcon_duoyunzhuanqing.png

觉得这种类似白底素描的风格非常合我口味,所以直接拿来用了。
我们暂时先不讨论我就这么直接下载下来用是不是侵权了吧……

简单的介绍一下项目吧。

业务逻辑:

1. 程序启动后自动加载上一次选择的城市,如果没有,默认城市为北京。
2. 屏幕左上方俩按钮 

<1> 上方的显示当前城市的空气质量,按钮背景固定,前景图片可更换。
    如果当前城市空气质量为 "优" 或 "良" 显示为绿色树叶,
    非这两种状态(污染较严重)显示枯黄色树叶。
    
    点击后push一个空气质量的详情界面,显示 "PM25"、"空调"、"运动"、"紫外线"四项指标。(UIView)
    //是的,找不到理想中的扁平化“紫外线”图标,用的工业UV警示牌来凑数的
    //写完上面这句我发现紫外线跟空气质量好像也没什么关系.....

    附带对应的生活建议 ,其中PM25的图片会根据实际情况改变
    //这几个图标颜色(黑色)和文字颜色(白色)根本不搭的问题我真的努力过的去解决了!
    //但后来发现根本找不到现成的白色图标后,我就自暴自弃了……

    下方4个按钮是常规的风向风力温度湿度,再加一个醒目的大号温度显示
<2> 下方一个“7”的日历按钮,点击后push至 "未来6天"天气预报 (UITableView)。
    
 
    固定的6行Cell  每行Cell代表1天,Cell的高度我采用了简单粗暴的 height / 6(其实如果固定Cell高度,再给tableViewHeader footer 添点什么东西似乎会好看很多)
    左侧:日期 + 周几 + 天气图标 
    中段:最低气温到最高气温 (实际是夜间的平均气温到白天的平均气温)。
    右侧:显示风力、风向。
    cell的背景会根据预报中的天气进行更换。
    默认cell的文字颜色颜色为白色 ,但是实际模拟 "阴天"、"大雪"等几种天气时,由于背景图片偏白,
    会导致文字看不清,增加了一层判断,当处于这几种天气时,字体颜色改为黑色。
3. 屏幕右下方黄色刷新按钮

// 就是刷新按钮……点击后重新发送请求,获取新的天气情况(如果有更新的话)
// 做好之后才想起似乎应该做成下拉刷新,懒的改了……

4. 底部tabbar中部的定位按钮 
   点击后modal出一个城市选择控制器  (UICollectionView)
   注册了自定义的Cell  Header  Footer 用来对应不同的功能模块
Cell:   流水布局部分热门(省会)城市

Header: 1> 返回按钮: 用来dismiss控制器,
        2> searchBar: 手动输入搜索城市 
        3> 2个Label,一个作为cell的标题部分,显示"热门城市"。另一个没什么卵用……
PS: 是的,Header的背景图片由原本的某比较好看的矢量天气图片被我换成了"守望先锋"....label内的文字也是,单纯的恶趣味

Footer:本来是打算集成 “换一批” 按钮用来切换Items的,
       

static NSString * const reuseIdentifier = @"Cell";
static NSString * const header = @"header";
static NSString * const footer = @"footer";
// 贴个注册用的代码意思一下……
   UINib *cellXib = [UINib nibWithNibName:@"CityCell" bundle:nil];
   [self.collectionView registerNib:cellXib forCellWithReuseIdentifier:reuseIdentifier];
   [self.collectionView registerClass:[ChooseHeader class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:header];
   [self.collectionView registerClass:[ChooseFooter class] forSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:footer]; 
5. tabbar右侧的设置按钮 
   偷懒,就放了俩按钮,链接简书和GitHub。

// 本来想做成设置的,但是想来想去没觉得有什么好设置的……
// 因为首页的图标是黑色的(没找到白色的),找跟这个主题搭配的背景图片相当蛋疼……

项目尝试使用的新的三方库及一点感受

1. YYModel 
// 1. 很好很强大,之前一直用MJExtension,用来这个库之后的确像是打开了新世界的大门!
// 2. 使用自定义属性名映射JSON中的原属性真的很好用
// 3. 继续摸索中,尝试在一个model文件中把JSON全部解析完。
// 4. 一开始的时候多模型嵌套嵌套的想死……

2. SVProgressHUD 
// 1. 使用单例模式进行提示的显示,从使用的角度来说感觉是比之前用的MBProgressHUD要好一些 
// 2. 自定义提示动画学习中.....

3. Masonry 
// 1. 好评!
// 2. 写各种mas_equalTo语句的时候如行云流水一般,唰唰唰的就下来了!
// 3. 然后回头看的时候就在想"之前写的都什么狗屁玩意".......


4. 一些辅助的扩展类,计算宽高 NSString处理之类,没什么好说的

遇到的坑

1. 导航栏的背景图片 
// 获取一张重新绘制的可调整透明度的图片
UIImage *image = [UIImage imageNamed:@"navi_bg"];
UIImage *newImage = [image imageByApplyingAlpha:1];
// 设置其位navigationBar的背景图片
[self.navigationController.navigationBar setBackgroundImage:newImage forBarMetrics:UIBarMetricsDefault];

关键在于,一旦设置了导航条的背景图片
控制器的所有子控件计算位置方法发生改变
原屏幕顶部为视图top -> 添加导航条背景图片后 -> 导航条底部变为视图的顶部
--->  所有子控件布局时的位置需要上移一个导航条宽度(64)
UIImage + Extension 内的扩展方法  --> 绘制新的透明度可调的图片
- (UIImage *)imageByApplyingAlpha:(CGFloat)alpha {
    UIGraphicsBeginImageContextWithOptions(self.size, NO, 0.0f);
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGRect area = CGRectMake(0, 0, self.size.width, self.size.height);
    CGContextScaleCTM(ctx, 1, -1);
    CGContextTranslateCTM(ctx, 0, -area.size.height);
    CGContextSetBlendMode(ctx, kCGBlendModeMultiply);
    CGContextSetAlpha(ctx, alpha);
    CGContextDrawImage(ctx, area, self.CGImage);
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}

2. 中文字符转UTF-8
向服务器发送请求时要求将"城市名"转为UTF-8格式。
开始的时候各种抓瞎……

查了好久才找到解决办法
WeatherRequestURL = @"http://op.juhe.cn/onebox/weather/query?cityname=%@&key=%@"
NSString *requestStr = [NSString stringWithFormat:WeatherRequestURL,cityName,juheAppKey];
// !!!: 使用NSCharacterSet进行转码
NSString *request = 
  [requestStr stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
3. 布局方面 
未来6天的天气(UITableView)界面,因为只有6个cell,
想当然的在设置时将cell高度设置为 cellHeight =(屏幕高度 - 64)/ 6 ;
发现6S上简直丑到爆炸……同理还有首页的视图位置,因为设置的都是相对位置,
切换设备时, 屏幕宽度为320时还能凑合看,一旦超过320的设备,无一不是丑到爆炸!
// 先凑合看吧……

先这么多吧,其实我也不知道写这些干嘛……

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,790评论 25 707
  • 我完成了TNF北京百公里越野,总爬升6000米,耗时24小时51分38秒,比28小时关门时间提前了3个多小时。根据...
    生人漫步阅读 14,110评论 3 51
  • 昭设宴款待,先以魏舞乐戏于前,蜀官感伤,独后主有喜色。昭令蜀人扮蜀乐于前,蜀官尽皆堕泪,后主嬉笑自如。酒至半酣,昭...
    简书小小屋阅读 263评论 0 0
  • 【鞋狗】读书笔记: 1973{前边是摘抄文中的,()括号里是自己的感悟} 1、鞋狗就是那些全身心投入其中,努力制造...
    小杜迎超阅读 773评论 0 0