在项目中添加一个新的模块时【tabbar】,会设置相应的引导页做为介绍,引导页中会设置相应的图标展示,蒙版的添加,角标的设置。首先呢是关于添加新手蒙版,无非是添加一个View,设置为对应的引导层,如果不做那种投射效果的话,可以直接设置蒙版的透明度【一般设置为0.7左右】,其他的展示就直接添加即可。不过这时候如果在界面上添加了开机引导页的话,就会造成添加的新手引导蒙版会直接覆盖到开机页上面。示例如下图所示:
解决方法分两种情况: 1、首页展示的只有一种情况的时候并且软件框架是‘底部标签式’的交互模式-----【只展示登录界面或者只展示一个home页】 这种情况下可以使用通知,首页在要展示的界面注册通知:
// 使用引导图 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(firstload) name:@"firstloadHome" object:nil];
,然后在点击首页引导隐藏的按钮处发送通知
[[NSNotificationCenter defaultCenter]postNotificationName:@"firstloadHome" object:nil];
在接收到通知的方法里直接进行加载要展示的引导页就可以了。
2、首页展示的界面可能有多种情况(未登录展示登录界面、登录了展示home界面)并且未采用UITabbar的情况,可以将视图直接添加到view上【默认添加到window上】 这样就能避免上述情况;
除此之外呢,新的版块的加入,势必会标记一下这个版块,一般采用添加小红点的方式,一般是设置一个UITabbar的分类,在分类上添加一个View,此时要注意的有两点,(1)界面的适配要针对iPad和iPhone故要做相应的两套布局:
if([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad){ //ipad //确定小红点的位置 float percentX = (index+0.35) / tabbarItemNums; CGFloat x = ceilf(percentX * tabFrame.size.width); CGFloat y = ceilf(0.1 * tabFrame.size.height); badgeView.frame = CGRectMake(x, y, 10, 10); [self addSubview:badgeView]; }else { //iphone //确定小红点的位置 float percentX = (index +0.6) / tabbarItemNums; CGFloat x = ceilf(percentX * tabFrame.size.width); CGFloat y = ceilf(0.1 * tabFrame.size.height); badgeView.frame = CGRectMake(x, y, 10, 10); [self addSubview:badgeView]; }
(2)加载的时机,一般写完分类后会在界面的出现的时候调用,在界面点击的时候隐藏,但是如果工程中存在根视图(rootTabbar)的情况下,即使调用了相关的展示方法,小红点也是不会出现,这一块就涉及到视图的生命周期问题,如果在子视图的界面中调用的话,会重新创建出一个uitabbar,此时的tabbar和展示的tabbar不一致并且没有设置相应的frame所以会看到即使在首页中调用了展示小红点的方法也不会出现。所以这时候也可以采用通知的解决方式:如下所示:
在根视图中注册相应的通知
// 添加红色小按钮 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showBadgeWithIndex) name:@"addfirstNotification" object:nil];
再在加载新手引导页的地方发送添加红色按钮的通知
// 发送通知,添加红色的小按钮 [[NSNotificationCenter defaultCenter]postNotificationName:@"addfirstNotification" object:nil];
红色按钮消失的方法同理。