//
|
// CYLTabBarController.m
|
// CYLTabBarController
|
//
|
// v1.16.0 Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 10/20/15.
|
// Copyright © 2015 https://github.com/ChenYilong . All rights reserved.
|
//
|
|
#import "UIControl+CYLTabBarControllerExtention.h"
|
#import <objc/runtime.h>
|
#import "UIView+CYLTabBarControllerExtention.h"
|
#import "CYLConstants.h"
|
|
@implementation UIControl (CYLTabBarControllerExtention)
|
|
- (void)cyl_showTabBadgePoint {
|
[self cyl_setShowTabBadgePointIfNeeded:YES];
|
}
|
|
- (void)cyl_removeTabBadgePoint {
|
[self cyl_setShowTabBadgePointIfNeeded:NO];
|
}
|
|
- (BOOL)cyl_isShowTabBadgePoint {
|
return !self.cyl_tabBadgePointView.hidden;
|
}
|
|
- (void)cyl_setShowTabBadgePointIfNeeded:(BOOL)showTabBadgePoint {
|
@try {
|
[self cyl_setShowTabBadgePoint:showTabBadgePoint];
|
} @catch (NSException *exception) {
|
NSLog(@"CYLPlusChildViewController do not support set TabBarItem red point");
|
}
|
}
|
|
- (void)cyl_setShowTabBadgePoint:(BOOL)showTabBadgePoint {
|
if (showTabBadgePoint && self.cyl_tabBadgePointView.superview == nil) {
|
[self addSubview:self.cyl_tabBadgePointView];
|
[self bringSubviewToFront:self.cyl_tabBadgePointView];
|
self.cyl_tabBadgePointView.layer.zPosition = MAXFLOAT;
|
// X constraint
|
[self addConstraint:
|
[NSLayoutConstraint constraintWithItem:self.cyl_tabBadgePointView
|
attribute:NSLayoutAttributeCenterX
|
relatedBy:0
|
toItem:self.cyl_tabImageView
|
attribute:NSLayoutAttributeRight
|
multiplier:1
|
constant:self.cyl_tabBadgePointViewOffset.horizontal]];
|
//Y constraint
|
[self addConstraint:
|
[NSLayoutConstraint constraintWithItem:self.cyl_tabBadgePointView
|
attribute:NSLayoutAttributeCenterY
|
relatedBy:0
|
toItem:self.cyl_tabImageView
|
attribute:NSLayoutAttributeTop
|
multiplier:1
|
constant:self.cyl_tabBadgePointViewOffset.vertical]];
|
}
|
self.cyl_tabBadgePointView.hidden = showTabBadgePoint == NO;
|
self.cyl_tabBadgeView.hidden = showTabBadgePoint == YES;
|
}
|
|
- (void)cyl_setTabBadgePointView:(UIView *)tabBadgePointView {
|
UIView *tempView = objc_getAssociatedObject(self, @selector(cyl_tabBadgePointView));
|
if (tempView) {
|
[tempView removeFromSuperview];
|
}
|
if (tabBadgePointView.superview) {
|
[tabBadgePointView removeFromSuperview];
|
}
|
|
tabBadgePointView.hidden = YES;
|
objc_setAssociatedObject(self, @selector(cyl_tabBadgePointView), tabBadgePointView, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
}
|
|
- (UIView *)cyl_tabBadgePointView {
|
UIView *tabBadgePointView = objc_getAssociatedObject(self, @selector(cyl_tabBadgePointView));
|
|
if (tabBadgePointView == nil) {
|
tabBadgePointView = self.cyl_defaultTabBadgePointView;
|
objc_setAssociatedObject(self, @selector(cyl_tabBadgePointView), tabBadgePointView, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
}
|
return tabBadgePointView;
|
}
|
|
- (void)cyl_setTabBadgePointViewOffset:(UIOffset)tabBadgePointViewOffset {
|
objc_setAssociatedObject(self, @selector(cyl_tabBadgePointViewOffset), [NSValue valueWithUIOffset:tabBadgePointViewOffset], OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
}
|
|
//offset如果都是正数,则往右下偏移
|
- (UIOffset)cyl_tabBadgePointViewOffset {
|
id tabBadgePointViewOffsetObject = objc_getAssociatedObject(self, @selector(cyl_tabBadgePointViewOffset));
|
UIOffset tabBadgePointViewOffset = [tabBadgePointViewOffsetObject UIOffsetValue];
|
return tabBadgePointViewOffset;
|
}
|
|
- (UIView *)cyl_tabBadgeView {
|
for (UIView *subview in self.subviews) {
|
if ([subview cyl_isTabBadgeView]) {
|
return (UIView *)subview;
|
}
|
}
|
return nil;
|
}
|
|
- (UIImageView *)cyl_tabImageView {
|
for (UIImageView *subview in self.subviews) {
|
if ([subview cyl_isTabImageView]) {
|
return (UIImageView *)subview;
|
}
|
}
|
return nil;
|
}
|
|
- (UILabel *)cyl_tabLabel {
|
for (UILabel *subview in self.subviews) {
|
if ([subview cyl_isTabLabel]) {
|
return (UILabel *)subview;
|
}
|
}
|
return nil;
|
}
|
|
#pragma mark - private method
|
|
- (UIView *)cyl_defaultTabBadgePointView {
|
UIView *defaultRedTabBadgePointView = [UIView cyl_tabBadgePointViewWithClolor:[UIColor redColor] radius:4.5];
|
return defaultRedTabBadgePointView;
|
}
|
|
@end
|