CYLTabBarController 第五篇(Tabbar底部
以下笔记内容仅供个人参考,如有理解错误,请高抬贵手,仙人指路,互相学习进步...
使用方法教程
使用方法及教程,查看项目源码github地址:https://github.com/ChenYilong/CYLTabBarController,非常感谢开源的作者,开源促进社区的发展,共建和谐社会😆!
框架全部文件结构
1.CYLTabBarController
2. CYLTabBar
3.CYLPlusButton
4.UIViewController+CYLTabBarControllerExtention
5.UIView+CYLTabBarControllerExtention
6.UITabBarItem+CYLTabBarControllerExtention
7.UIControl+CYLTabBarControllerExtention
8.CYLConstants
8.总结
解读UIView+CYLTabBarControllerExtention类文件,在源码中中文注释自己的理解👇
UIViewController+CYLTabBarControllerExtention类文件(.h,.m)
解读UIViewController+CYLTabBarControllerExtention.h,
UIViewController+CYLTabBarControllerExtention.m
可能需要理解的知识点:
.Block代码块 【 http://www.jianshu.com/p/14efa33b3562】
.类别Category扩展 【http://www.jianshu.com/p/b49e02eb7eb3】
.runtime机制 【 https://github.com/Tuccuay/RuntimeSummary】
.KVC设计模式 【 http://www.jianshu.com/p/45cbd324ea65】
.KVO设计模式 【 http://www.jianshu.com/p/e59bb8f59302】
.异常处理机制 【http://www.jianshu.com/p/f28b9b3f8e44】
UIView+CYLTabBarControllerExtention文件
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@interface UIView (CYLTabBarControllerExtention)
//给UIView视图添加了一个分类,通过这个分类进行判断该视图是否是凸起按钮,或者是否是tabbarItem 按钮,或者以及相关的控件类型
- (BOOL)cyl_isPlusButton;
- (BOOL)cyl_isTabButton;
- (BOOL)cyl_isTabImageView;
- (BOOL)cyl_isTabLabel;
- (BOOL)cyl_isTabBadgeView;
//设置badge视图View的颜色以及圆角
+ (UIView *)cyl_tabBadgePointViewWithClolor:(UIColor *)color radius:(CGFloat)radius;
@end
#import <UIKit/UIKit.h>
#import "UIView+CYLTabBarControllerExtention.h"
#import "CYLPlusButton.h"
@implementation UIView (CYLTabBarControllerExtention)
- (BOOL)cyl_isPlusButton {
return [self isKindOfClass:[CYLExternPlusButton class]];
}
- (BOOL)cyl_isTabButton {
BOOL isKindOfButton = [self cyl_isKindOfClass:[UIControl class]];
return isKindOfButton;
}
- (BOOL)cyl_isTabImageView {
BOOL isKindOfImageView = [self cyl_isKindOfClass:[UIImageView class]];
if (!isKindOfImageView) {
return NO;
}
NSString *subString = [NSString stringWithFormat:@"%@cat%@ew", @"Indi" , @"orVi"];
BOOL isBackgroundImage = [self cyl_classStringHasSuffix:subString];
BOOL isTabImageView = !isBackgroundImage;
return isTabImageView;
}
- (BOOL)cyl_isTabLabel {
BOOL isKindOfLabel = [self cyl_isKindOfClass:[UILabel class]];
return isKindOfLabel;
}
- (BOOL)cyl_isTabBadgeView {
BOOL isKindOfClass = [self isKindOfClass:[UIView class]];
BOOL isClass = [self isMemberOfClass:[UIView class]];
BOOL isKind = isKindOfClass && !isClass;
if (!isKind) {
return NO;
}
NSString *tabBarClassString = [NSString stringWithFormat:@"%@IB%@", @"_U" , @"adg"];
BOOL isTabBadgeView = [self cyl_classStringHasPrefix:tabBarClassString];;
return isTabBadgeView;
}
- (BOOL)cyl_isKindOfClass:(Class)class {
BOOL isKindOfClass = [self isKindOfClass:class];
BOOL isClass = [self isMemberOfClass:class];
BOOL isKind = isKindOfClass && !isClass;
if (!isKind) {
return NO;
}
BOOL isTabBarClass = [self cyl_isTabBarClass];
return isTabBarClass;
}
- (BOOL)cyl_isTabBarClass {
NSString *tabBarClassString = [NSString stringWithFormat:@"U%@a%@ar", @"IT" , @"bB"];
BOOL isTabBarClass = [self cyl_classStringHasPrefix:tabBarClassString];
return isTabBarClass;
}
- (BOOL)cyl_classStringHasPrefix:(NSString *)prefix {
NSString *classString = NSStringFromClass([self class]);
return [classString hasPrefix:prefix];
}
- (BOOL)cyl_classStringHasSuffix:(NSString *)suffix {
NSString *classString = NSStringFromClass([self class]);
return [classString hasSuffix:suffix];
}
+ (UIView *)cyl_tabBadgePointViewWithClolor:(UIColor *)color radius:(CGFloat)radius {
UIView *defaultTabBadgePointView = [[UIView alloc] init];
[defaultTabBadgePointView setTranslatesAutoresizingMaskIntoConstraints:NO];
defaultTabBadgePointView.backgroundColor = color;
defaultTabBadgePointView.layer.cornerRadius = radius;
defaultTabBadgePointView.layer.masksToBounds = YES;
defaultTabBadgePointView.hidden = YES;
// Width constraint
[defaultTabBadgePointView addConstraint:[NSLayoutConstraint constraintWithItem:defaultTabBadgePointView
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute: NSLayoutAttributeNotAnAttribute
multiplier:1
constant:radius * 2]];
// Height constraint
[defaultTabBadgePointView addConstraint:[NSLayoutConstraint constraintWithItem:defaultTabBadgePointView
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute: NSLayoutAttributeNotAnAttribute
multiplier:1
constant:radius * 2]];
return defaultTabBadgePointView;
}
@end
** CYLTabBarControllerExtention总结:**
1、自定义了一个CYLTabBarControllerExtention的View分类,主要用来判断视图View是否是与tabbar相关的
2、提供入口设置badge的视图的颜色以及圆角修改