// // 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 #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