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

相关推荐
sakiko_8 小时前
Swift学习笔记42-SwiftUI的属性包装器(讲解+面试)
笔记·学习·ios·swiftui·swift
Patrick_Wilson16 小时前
iOS Safari 按钮点击无响应问题修复指南
前端·ios·safari
随遇丿而安17 小时前
第 3 周:UIButton 点了没反应,因为它默认就没有按压态
ios
思盛iOS签名上架1 天前
App苹果签名有什么作用?
macos·ios·cocoa
CocoaKier2 天前
Facebook广告后台收不到Adjust回传数据,我们排查了一个月终于找到了根因
ios·facebook
FairGuard手游加固3 天前
iOS 游戏加固技术解析:代码混淆、资源加密、内存保护与重签名检测
安全·游戏·macos·unity·ios·objective-c
思盛iOS签名上架3 天前
iOS企业签名原理是什么?
macos·ios·cocoa
Daniel_Coder3 天前
我用 SwiftUI + GRDB 做了一个「按时吃药·服药提醒」App
ios·swiftui·swift·widgetkit
Patrick_Wilson3 天前
iOS 第三方浏览器图片下载失败问题
前端·ios·浏览器