iOS - 天气预报仿写总结

天气预报仿写总结

文章目录

模糊搜索

这一部分就是网络请求获取实时搜索的数据并更新搜索结果的TableView

主要的难点在于网络请求部分,感兴趣的同学请移步上一篇文章【OC】网络请求

该项目中所有的网络请求,JSON数据解析和城市天气所有数据Model都封装成单独类,这样使用的时候直接调用即可

  • 模糊搜索部分我使用了UISearchController来展示搜索栏和搜索结果,updateSearchResultsForSearchController:searchController在该函数读取用户每次的键盘输入,之后调用你的请求函数接入实时搜索API获取你的城市数据,最后reloadData重新加载你的搜索结果tableView(注意这里要做一个防抖测试 ,核心思想就是等用户停止输入一段时间再发送请求,而不是很短时间内每输入一个字符就发送请求,这会产生很多无意义的请求)

天气详情页

天气详情页push的过程中我会传入刚刚点击cell并调用网络请求获取的该城市天气的所有数据,这样在该页面只需要专心做UI即可

  • 该页面主要是一个tableView,在小时预报和方框卡片这里嵌套collectionView,在每日天气这里嵌套tableView,并且使用UITableViewStylePlain系统会给每组header自动吸顶

    观察过苹果原生天气预报在上滑的过程中城市温度和城市名会逐渐消失,并且城市名会吸顶,我的思路是scrollViewDidScroll:(UIScrollView *)scrollView监听用户滚动,在该函数中获取滚动数据并实时更新UILabel的alpha,达到上滑过程中逐渐消失,对于城市名吸顶则是在navigationItem.titleView这里再添加一个城市名,在上滑的过程中self.tableView.tableHeaderView里的城市名逐渐消失,导航栏这里则是逐渐出现

  • 可以在对你的tableView添加和每一个cell一样角度的圆角,这样在滑动的过程就可以更贴合苹果原生UI界面

  • 每张卡片背景使用的是毛玻璃效果并且降低毛玻璃的透明度

  • 添加按钮则是将该城市的城市数据添加到所有城市的数组里,注意同一城市不能重复加

天气主页

主页就是一个UITableView展示所有添加到主页的城市,添加的时候由于所有城市的Model是一个单例,所以在天气详情页对NSMutableArray添加数据也会同步过来,每一个cell点开用模态视图推出刚刚的天气详情页即可

这里点击后推出的视图支持翻页功能,我这里用的是UIPageViewController,其实也可以用scrollView来做,但是这个的翻页就要自己维护比较麻烦

返回按钮这些可以使用iOS 26新出的液态玻璃UIButtonclearGlassButtonConfiguration模式

UIPageControl这里我在他的下面放了一个空白UIButton,再对UIButton进行约束让UIPageControl撑起UIButton的大小,这样这个圆点就也有液态玻璃的效果

城市天气编辑

这里编辑的按钮我用到的是UIMenu控件,点击UIAction后打勾和不打勾的变化比较麻烦,可以参考学长的这篇博客UIMenu的简单实用

编辑cell我使用的是[self.tableView setEditing:YES animated:YES]tableView的编辑状态转换,只需要删除model里的该城市数据,并[self.tableView deleteSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationAutomatic]

删除对应tableView即可,也可以直接全部重新加载reloadData

相关推荐
茶底世界之下15 小时前
为什么预览、录制、离线导出不能共享同一个背压策略?
ios·swift
2501_9160074715 小时前
苹果商店iOS应用上架费用全面解析:开发者计划与审核费用计算
android·ios·小程序·https·uni-app·iphone·webview
2501_9160088917 小时前
如何实现iOS App代码混淆:SwiftShield使用指南
android·ios·小程序·https·uni-app·iphone·webview
2501_9159090617 小时前
移动端开发工具链怎么组合比较好,iOS、Android、跨端三套配置方案
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
2501_9160088919 小时前
怎么用 Godot 导出 iOS 应用并上架 App Store?签名字段该填什么?
android·ios·小程序·https·uni-app·iphone·webview
2501_915918411 天前
iOS编程用什么软件好?主流工具Xcode、AppCode、CodeRunner与新兴快蝎对比
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
终端安全笔记2 天前
iOS 27 之后「策略空转」:设备升级不报错,但旧策略不再管它
android·网络·安全·ios·智能手机
9765033352 天前
iOS 上架 4.3a 被拒【uniapp专讲】
flutter·ios·objective-c·uniapp·swift
黑化旺仔2 天前
【OC】KVO
macos·ios·objective-c·cocoa
HouWan2 天前
SwiftUI 小技巧:如何读取 SwiftUI Font 的详细信息
ios·swiftui·apple