学习HM微博项目第3天

news/2024/7/20 22:38:17 标签: 学习, ios

步骤:自定义tabBar -> 版本新特性01-搭载界面 -> 版本新特性02-按钮的使用细节 -> 版本新特性03-新版本判断

自定义tabBar

在前面的学习中,系统自带的tabBar是这样的:

 

由于某个需求,需要在tabBar的中间加上一个发送微博的按钮,并且保证与tabBar上原先的4个UITabBarButton的间隔“和谐”。

经过尝试,发现只有自定义tabBar才能改变UITabBarButton与自定义UIButton的frame。

在HMTabBarViewController类的viewDidLoad方法中,初始化子控制器后,更换系统自带的tabBar,在自定义的tabBar中修改UITabBarButton的frame。如下:

 

第一步:创建继承UITabBar的HMTabBar。

在HMTabBar的实现类中,封装tabBar的细节,如下:

在initWithFrame方法中,封装tabBar的细节,但是有关内部控件的位置和尺寸需要封装到layoutSubviews方法中,具体如下:

 

 

做完后APP的界面:

 

第二步:为了实现“+”按钮的功能(跳转到另外一个view),采用了设置代理的方法。注意:view的切换用的是modal的方式。

先在HMTabBar的声明类中,声明代理协议,如下:

然后在实现类中通知代理对象,如下:

 

最后,在HMTabBarViewController类中设置代理,遵守该代理协议,并实现代理方法,如下: 

注意:有关设置代理,这里有些不同,我们可以不用设置代理,因为前面的[self setValue:tabBar forKey:@"tabBar"]; 这行代码已经确定了tabBar的delegate就是HMTabBarViewController。

具体可见:

版本新特性01-搭载界面

 

 为了实现这样的功能,需要在AppDelegate类中暂时更换window的rootViewController,如下:

在HMNewfeatureViewController类(继承UIViewController)的viewDidLoad方法中 ,创建一个scrollView并将演示图片添加到scrollView中,具体如下:

 在前面的演示gif中,可以看到pageControl的小圆点会随着图片的拖动而改变,需要遵守UIScrollViewDelegate代理协议,然后实现scrollViewDidScroll:代理方法,如下:

注意:四舍五入计算页码的思路:
(int)(page + 0.5)
doublePage (int)page
1.3 : 1.3 + 0.5 = 1.8 = 1
1.5 : 1.5 + 0.5 = 2 = 2
1.6 : 1.6 + 0.5 = 2.1 = 2
0.7 : 0.7 + 0.5 = 1.2 = 1

版本新特性02-按钮的使用细节

在HMNewfeatureViewController的实现类中,对代码进行重新梳理,如下:

在viewDidLoad方法中的“2.添加图片到scrollView中”需要添加一段代码,判断最后一个imageView并添加其他内容到里面,如下:

 

方法setupLastImage:的代码如下:

方法shareClick:与startClick:的代码如下: 

 

版本新特性03-新版本判断

演示APP:

新版本特性只有在第一次启动新版本的APP才需要显示,所以需要在AppDelegate类中判断版本号并作出选择,如下:

 

演示后新版本特性后,点击开始微博按钮会跳转到主页的控制器,这里有个值得思考的地方,以前我们切换控制器有两种方式:push和modal,并且这两种方式中控制器的切换都是可逆的,然而新版本特性演示完没必要再切换到原先的新版本特性的控制器,这时候就不能使用以上的两种方式,可以使用第三种方式:切换window的rootViewController(不可逆的操作)。

完善上面的startClick:方法,如下:

 

 

 

 


http://www.niftyadmin.cn/n/181330.html

相关文章

数据库基本概念与安装MySQL数据库

目录 一.数据库的发展史 1.文件管理系统的缺点 2.数据库管理系统DBMS的优点 3.数据库管理系统(DBMS) 4.数据库系统发展阶段 5.数据库管理系统的基本功能 6.数据库系统的架构 7.数据库管理系统分类 7.1 层次数据库 7.2 网状数据库 7.3 RDBMS 关…

亚马逊云科技连续三年获得多项用户满意度第一

日前,在由中国工业信息安全发展研究中心、中国电子质量管理协会指导,计世资讯主办的“第二十一届中国IT用户满意度大会”上,亚马逊云科技在如下五个领域荣获“用户满意度第一”奖项,分别为企业出海云服务解决方案、人工智能与机器…

全球时间与北京时间、UTC时间关系表

全球主要国家标准时间 国家与北京时差当前时间 *表示正处于夏令时[中国]北京无时差【UTC8:00】 2023年03月31日 17:57:57[蒙古]乌兰巴托无时差【UTC8:00】 2023年03月31日 17:57:57[朝鲜]平壤快1小时【UTC9:00】 2023年03月31日 18:57:57[韩国]首尔快1小时【UTC9:00】 2023年0…

Studio One没有声音怎么办 Studio One工程没有声音

Studio One是一款非常优秀编曲软件,能够帮助用户高效的进行编曲和创作,也是目前主流的通道机架软件之一,受到很多音乐编曲爱好者的追捧。但是很多刚接触这款软件的小伙伴会碰到这样或者那样的问题,比如Stuidio one没有声音怎么办&…

bug奇遇记

1. tar -x datasets.tar tar: Refusing to read archive contents from terminal (missing -f option?) tar: Error is not recoverable: exiting now (retroprompt) tar –xvf datasets.tar tar: invalid option -- � Try tar --help or tar --usage for more…

python调用execjs,运行本地js脚本出现JSON 未定义的错误

一般第一次调用execjs,几乎都会出现的错误,解决过程如下: 下载和安装node 下载 官网下载就好啦:点我直达官网 安装 下载后是一个msi文件,直接安装就行,安装过程中,会出现shell的窗口,不用管…

Linux 上生成 SSL 证书

要在 Linux 上生成 SSL 证书并将其用于 Nginx 的 443 端口,请按以下步骤操作: 安装 Certbot:Certbot 是一个免费的开源工具,可用于自动化 SSL 证书的获取和更新。您可以通过运行以下命令来安装 Certbot: sudo apt-ge…

felx布局--百度2020校招Web前端工程师笔试

下列布局在页面上的宽度比是多少&#xff1f; <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, initial-scale1.0"…