From 2eaabd6c14c664997e63a79c63de2ce62a1ee0e4 Mon Sep 17 00:00:00 2001 From: Elon Chan Date: Tue, 5 May 2020 13:34:41 +0800 Subject: [PATCH] fix: v1.28.5 key icon center without title, edit shadow appearance in iOS13 fix issues: https://github.com/ChenYilong/CYLTabBarController/issues/431 https://github.com/ChenYilong/CYLTabBarController/issues/436 https://github.com/ChenYilong/CYLTabBarController/issues/492 https://github.com/ChenYilong/CYLTabBarController/issues/423 --- CYLTabBarController.podspec | 2 +- CYLTabBarController/CYLTabBarController.m | 25 ++++++- .../UIControl+CYLTabBarControllerExtention.m | 2 +- .../UIImage+CYLTabBarControllerExtention.m | 4 +- .../UIView+CYLTabBarControllerExtention.m | 25 +++++-- .../Module/Mine/CYLMineViewController.m | 1 + .../green_lottie_tab_discover.json | 1 + .../green_lottie_tab_home.json | 1 + .../green_lottie_tab_mine.json | 1 + .../green_lottie_tab_news.json | 1 + Example/Classes/View/CYLPlusButtonSubclass.m | 10 ++- .../hood-selected@2x.png | Bin 5354 -> 0 bytes .../hood.imageset/Contents.json | 21 ------ .../Images.xcassets/hood.imageset/hood@2x.png | Bin 4744 -> 0 bytes .../Contents.json | 11 +-- .../icon_tabbar_plus@2x.png | Bin 0 -> 5389 bytes .../icon_tabbar_plus@3x.png | Bin 0 -> 7951 bytes Example/MainTabBarController.m | 69 ++++++++++++------ Podfile | 5 +- 19 files changed, 107 insertions(+), 72 deletions(-) create mode 100755 Example/Classes/Other/LottieResources/green_lottie_tab_discover.json create mode 100755 Example/Classes/Other/LottieResources/green_lottie_tab_home.json create mode 100755 Example/Classes/Other/LottieResources/green_lottie_tab_mine.json create mode 100755 Example/Classes/Other/LottieResources/green_lottie_tab_news.json delete mode 100644 Example/Images.xcassets/hood-selected.imageset/hood-selected@2x.png delete mode 100644 Example/Images.xcassets/hood.imageset/Contents.json delete mode 100644 Example/Images.xcassets/hood.imageset/hood@2x.png rename Example/Images.xcassets/{hood-selected.imageset => icon_tabbar_plus.imageset}/Contents.json (56%) create mode 100644 Example/Images.xcassets/icon_tabbar_plus.imageset/icon_tabbar_plus@2x.png create mode 100644 Example/Images.xcassets/icon_tabbar_plus.imageset/icon_tabbar_plus@3x.png diff --git a/CYLTabBarController.podspec b/CYLTabBarController.podspec index 11f9770d..aab6fcb2 100644 --- a/CYLTabBarController.podspec +++ b/CYLTabBarController.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "CYLTabBarController" - s.version = "1.28.5" + s.version = "1.29.0" s.summary = "Highly customizable tabBar and tabBarController for iOS" s.description = "[EN]It is an iOS UI module library for adding animation to iOS tabbar items and icons with Lottie. [CN]【中国特色 TabBar】一行代码实现 Lottie 动画TabBar,支持中间带+号的TabBar样式,自带红点角标,支持动态刷新。【iOS12 & iPhone XS MAX supported】" s.homepage = "https://github.com/ChenYilong/CYLTabBarController" diff --git a/CYLTabBarController/CYLTabBarController.m b/CYLTabBarController/CYLTabBarController.m index fe4fd349..91f1f046 100644 --- a/CYLTabBarController/CYLTabBarController.m +++ b/CYLTabBarController/CYLTabBarController.m @@ -40,6 +40,7 @@ @interface CYLTabBarController () @property (nonatomic, strong) NSMutableArray *lottieURLs; @property (nonatomic, strong) NSMutableArray *lottieSizes; @property (nonatomic, assign, getter=isLottieViewAdded) BOOL lottieViewAdded; +@property (nonatomic, strong) UIImage *tabItemPlaceholderImage; @end @@ -91,6 +92,8 @@ - (void)viewDidLayoutSubviews { if ([control cyl_isChildViewControllerPlusButton]) { return; } + UILabel *tabLabel = control.cyl_tabLabel; + tabLabel.textAlignment = NSTextAlignmentCenter; SEL actin = @selector(didSelectControl:); [control addTarget:self action:actin forControlEvents:UIControlEventTouchUpInside]; if (idx == self.selectedIndex && ![control isKindOfClass:[CYLPlusButton class]]) { @@ -433,6 +436,21 @@ - (void)setTintColor:(UIColor *)tintColor { self.tabBar.tintColor = tintColor; } +/** + * lazy load tabItemPlaceholderImage + * + * @return UIImage + */ +- (UIImage *)tabItemPlaceholderImage { + if (_tabItemPlaceholderImage == nil) { + CGSize placeholderSize = CGSizeMake(22, 22); + UIImage *placeholderImage = [UIImage cyl_imageWithColor:[UIColor whiteColor] size:placeholderSize]; + UIImage *tabItemPlaceholderImage = placeholderImage; + _tabItemPlaceholderImage = tabItemPlaceholderImage; + } + return _tabItemPlaceholderImage; +} + /** * 添加一个子控制器 * @@ -450,13 +468,11 @@ - (void)addOneChildViewController:(UIViewController *)viewController lottieURL:(NSURL *)lottieURL lottieSizeValue:(NSValue *)lottieSizeValue { viewController.tabBarItem.title = title; - CGSize placeholderSize = CGSizeMake(22, 22); - UIImage *placeholderImage = [UIImage cyl_imageWithColor:[UIColor whiteColor] size:placeholderSize]; UIImage *normalImage = nil; if (normalImageInfo) { normalImage = [self getImageFromImageInfo:normalImageInfo]; } else { - normalImage = placeholderImage; + normalImage = self.tabItemPlaceholderImage; } viewController.tabBarItem.image = normalImage; @@ -464,7 +480,7 @@ - (void)addOneChildViewController:(UIViewController *)viewController if (selectedImageInfo) { selectedImage = [self getImageFromImageInfo:selectedImageInfo]; } else { - selectedImage = placeholderImage; + selectedImage = self.tabItemPlaceholderImage; } viewController.tabBarItem.selectedImage = selectedImage; @@ -488,6 +504,7 @@ - (void)addOneChildViewController:(UIViewController *)viewController tureLottieSizeValue = [NSValue valueWithCGSize:normalImage.size]; break; } + CGSize placeholderSize = CGSizeMake(22, 22); tureLottieSizeValue = [NSValue valueWithCGSize:placeholderSize]; break; } while (NO); diff --git a/CYLTabBarController/UIControl+CYLTabBarControllerExtention.m b/CYLTabBarController/UIControl+CYLTabBarControllerExtention.m index 072336ec..a4d2835c 100644 --- a/CYLTabBarController/UIControl+CYLTabBarControllerExtention.m +++ b/CYLTabBarController/UIControl+CYLTabBarControllerExtention.m @@ -76,7 +76,7 @@ - (BOOL)cyl_isSelected { NSUInteger tabBarSelectedIndex = self.cyl_tabBarController.selectedIndex; NSUInteger tabBarChildViewControllerIndex = self.cyl_tabBarChildViewControllerIndex; BOOL defaultSelected = self.selected; - if ((tabBarSelectedIndex == tabBarChildViewControllerIndex) && defaultSelected) { + if ((tabBarSelectedIndex == tabBarChildViewControllerIndex) && defaultSelected && CYLPlusChildViewController.cyl_plusViewControllerEverAdded) { isSelected = YES; } return isSelected; diff --git a/CYLTabBarController/UIImage+CYLTabBarControllerExtention.m b/CYLTabBarController/UIImage+CYLTabBarControllerExtention.m index f4856f30..1c56a741 100644 --- a/CYLTabBarController/UIImage+CYLTabBarControllerExtention.m +++ b/CYLTabBarController/UIImage+CYLTabBarControllerExtention.m @@ -35,7 +35,7 @@ + (UIImage *)cyl_assetImageName:(NSString *)assetImageName // } trait = [UITraitCollection traitCollectionWithUserInterfaceStyle:userInterfaceStyle]; image = [image.imageAsset imageWithTraitCollection:trait]; - //TODO: 如果Xcode10加入的asset,没有加入图片,那么image是nil,还是默认是light的值?我期望是获取的light的值,要不然xcode11编译后很多图片都不会显示啊!!!!! + //TODO: return image; #else #endif @@ -65,7 +65,7 @@ + (UIImage *)cyl_lightOrDarkModeImageWithOwner:(id)owner #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000 if (@available(iOS 13.0, *)) { #if __has_include() - //TODO: self 有自定义traitCollection,那么 [UITraitCollection currentTraitCollection]获取到的是当前系统的,还是当前self的?我期望是self的,不然的话,那就太坑了。每次都要判断self和系统两个做取舍,那太坑了!!!!! + //TODO: UITraitCollection *traitCollection = owner.traitCollection ?: [UITraitCollection currentTraitCollection]; UIUserInterfaceStyle userInterfaceStyle = traitCollection.userInterfaceStyle; isDarkImage = (userInterfaceStyle == UIUserInterfaceStyleDark); diff --git a/CYLTabBarController/UIView+CYLTabBarControllerExtention.m b/CYLTabBarController/UIView+CYLTabBarControllerExtention.m index 50a72a09..8acc1623 100644 --- a/CYLTabBarController/UIView+CYLTabBarControllerExtention.m +++ b/CYLTabBarController/UIView+CYLTabBarControllerExtention.m @@ -134,13 +134,24 @@ - (UIView *)cyl_tabBadgeBackgroundView { } - (UIImageView *)cyl_tabShadowImageView { - UIView *subview = [self cyl_tabBackgroundView]; - if (!subview) { - return nil; - } - NSArray<__kindof UIView *> *backgroundSubviews = subview.subviews; - if (backgroundSubviews.count > 1) { - for (UIView *subview in backgroundSubviews) { + if (@available(iOS 10.0, *)) { + //iOS10及以上这样获取ShadowImageView: + UIView *subview = [self cyl_tabBackgroundView]; + if (!subview) { + return nil; + } + NSArray<__kindof UIView *> *backgroundSubviews = subview.subviews; + //iOS13系统backgroundSubviews.count > 1可行,12及以下就不可行了 + if (backgroundSubviews.count >= 1) { + for (UIView *subview in backgroundSubviews) { + if (CGRectGetHeight(subview.bounds) <= 1.0 ) { + return (UIImageView *)subview; + } + } + } + } else { + //iOS9这样获取ShadowImageView: + for (UIView *subview in self.subviews) { if (CGRectGetHeight(subview.bounds) <= 1.0 ) { return (UIImageView *)subview; } diff --git a/Example/Classes/Module/Mine/CYLMineViewController.m b/Example/Classes/Module/Mine/CYLMineViewController.m index 2581f2be..b87c61ca 100644 --- a/Example/Classes/Module/Mine/CYLMineViewController.m +++ b/Example/Classes/Module/Mine/CYLMineViewController.m @@ -65,6 +65,7 @@ - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [tableView deselectRowAtIndexPath:indexPath animated:YES]; [self cyl_showBadgeValue:[NSString stringWithFormat:@"%@", @(indexPath.row)] animationType:CYLBadgeAnimationTypeNone]; + [self testPush]; } - (void)testPush { diff --git a/Example/Classes/Other/LottieResources/green_lottie_tab_discover.json b/Example/Classes/Other/LottieResources/green_lottie_tab_discover.json new file mode 100755 index 00000000..6c280efc --- /dev/null +++ b/Example/Classes/Other/LottieResources/green_lottie_tab_discover.json @@ -0,0 +1 @@ +{"v":"5.1.16","fr":30,"ip":0,"op":30,"w":60,"h":60,"nm":"Tab_Discovery_Active","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Icon_Discovery_Active_Line_Circle_Small","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2},"a":{"a":0,"k":[30,30,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[4.418,0],[0,4.418],[-4.418,0],[0,-4.418]],"o":[[-4.418,0],[0,-4.418],[4.418,0],[0,4.418]],"v":[[0,8],[-8,0],[0,-8],[8,0]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.325,0.843,0.416,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"ix":5},"lc":2,"lj":2,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[30,30],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"内圈","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.6],"y":[0]},"n":["0p4_1_0p6_0"],"t":0,"s":[0],"e":[99]},{"t":20}],"ix":2},"o":{"a":0,"k":180,"ix":3},"m":1,"ix":2,"nm":"修剪路径 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Icon_Discovery_Active_Line_Circle_Big","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2},"a":{"a":0,"k":[30,30,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-2.107],[1.432,-2.755],[3.5,-1.907],[3.46,0],[0,11.046],[-11.046,0],[-1.872,-0.58]],"o":[[0.604,1.907],[0,3.321],[-1.839,3.54],[-2.839,1.545],[-11.046,0],[0,-11.045],[2.063,0],[0,0]],"v":[[19.07,-6.044],[20,0],[17.759,9.208],[9.553,17.576],[0,20],[-20,0],[0,-20],[5.924,-19.108]],"c":false},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.325,0.843,0.416,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"ix":5},"lc":2,"lj":2,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[30,30],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"外圈","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.875],"y":[1]},"o":{"x":[0.6],"y":[0]},"n":["0p875_1_0p6_0"],"t":20,"s":[0],"e":[100]},{"t":29}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"修剪路径 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Icon_Discovery_Active_Triangle","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.167],"y":[0.048]},"n":["0p2_1_0p167_0p048"],"t":10,"s":[0],"e":[100]},{"t":14}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"n":["0p2_1_0p4_0"],"t":10,"s":[-45],"e":[0]},{"t":24}],"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2},"a":{"a":0,"k":[30,30,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[7.779,-7.778],[0.708,7.778],[-7.779,-0.707]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.325,0.843,0.416,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[37.778,22.222],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"三角","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Icon_Discovery_Active_Main","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.61],"y":[1]},"o":{"x":[0.24],"y":[0]},"n":["0p61_1_0p24_0"],"t":20,"s":[0],"e":[100]},{"t":26}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2},"a":{"a":0,"k":[30,30,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.313,0],[0,3.313],[3.313,0],[0,-3.313]],"o":[[3.313,0],[0,-3.313],[-3.313,0],[0,3.313]],"v":[[0,6],[6,0],[0,-6],[-6,0]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.682,0.878,0.69,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[32,32],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"内圆","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Icon_Discovery_Normal","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"n":["0p8_1_0p167_0p167"],"t":0,"s":[100],"e":[6]},{"t":10}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2},"a":{"a":0,"k":[30,30,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-4.418,0],[0,4.418],[4.418,0],[0,-4.418]],"o":[[4.418,0],[0,-4.418],[-4.418,0],[0,4.418]],"v":[[0,8],[8,0],[0,-8],[-8,0]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.498,0.498,0.498,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"ix":5},"lc":2,"lj":2,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[30,30],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[7.779,-7.778],[0.708,7.778],[-7.779,-0.707]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.498,0.498,0.498,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[37.778,22.222],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 3","np":2,"cix":2,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[2.063,0],[0,-11.045],[-11.046,0],[-2.839,1.545],[-1.839,3.54],[0,3.321],[0.604,1.907]],"o":[[-1.872,-0.58],[-11.046,0],[0,11.046],[3.46,0],[3.5,-1.907],[1.432,-2.755],[0,-2.107],[0,0]],"v":[[5.924,-19.108],[0,-20],[-20,0],[0,20],[9.553,17.576],[17.759,9.208],[20,0],[19.07,-6.044]],"c":false},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.498,0.498,0.498,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"ix":5},"lc":2,"lj":2,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[30,30],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 4","np":2,"cix":2,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/Example/Classes/Other/LottieResources/green_lottie_tab_home.json b/Example/Classes/Other/LottieResources/green_lottie_tab_home.json new file mode 100755 index 00000000..2bdf497c --- /dev/null +++ b/Example/Classes/Other/LottieResources/green_lottie_tab_home.json @@ -0,0 +1 @@ +{"v":"5.1.16","fr":30,"ip":0,"op":30,"w":60,"h":60,"nm":"Tab_Shop_Active","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Icon_Shop_Active_Line_A","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2},"a":{"a":0,"k":[30,30,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-3.313,0],[-1.075,1.617],[-2.087,0],[-1.075,1.617],[-2.087,0],[-1.075,1.617],[-2.087,0],[0,3.313],[0,0],[0.845,0],[0,0],[0.284,-0.796]],"o":[[0,3.313],[2.087,0],[1.075,1.617],[2.087,0],[1.075,1.617],[2.087,0],[1.075,1.617],[3.313,0],[0,0],[-0.285,-0.796],[0,0],[-0.846,0],[0,0]],"v":[[-21,-4],[-15,2],[-10,-0.682],[-5,2],[0,-0.682],[5,2],[10,-0.682],[15,2],[21,-4],[16.474,-16.673],[14.591,-18],[-14.59,-18],[-16.474,-16.673]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.325,0.843,0.416,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"ix":5},"lc":2,"lj":2,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.61],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"n":["0p61_1_0p167_0p167"],"t":16,"s":[6],"e":[0]},{"t":18}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.6],"y":[0]},"n":["0p4_1_0p6_0"],"t":0,"s":[6],"e":[100]},{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.6],"y":[0]},"n":["0p8_1_0p6_0"],"t":16,"s":[100],"e":[100]},{"t":35}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":3,"nm":"修剪路径 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[30,30],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"Line","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Icon_Shop_Active_Line_B","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2},"a":{"a":0,"k":[30,30,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-1.104,0],[0,0],[0,1.104],[0,0]],"o":[[0,0],[0,1.104],[0,0],[1.104,0],[0,0],[0,0]],"v":[[-16,0],[-16,16],[-14,18],[14,18],[16,16],[16,10]],"c":false},"ix":2},"nm":"路径 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.325,0.843,0.416,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"ix":5},"lc":2,"lj":2,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":0,"k":6,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.977],"y":[0.791]},"o":{"x":[0.964],"y":[0]},"n":["0p977_0p791_0p964_0"],"t":16,"s":[6],"e":[100]},{"i":{"x":[0.8],"y":[1]},"o":{"x":[1],"y":[0]},"n":["0p8_1_1_0"],"t":29,"s":[100],"e":[100]},{"t":35}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":3,"nm":"修剪路径 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[30,30],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"Line","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Icon_Shop_Active_Main","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.61],"y":[1]},"o":{"x":[0.24],"y":[0]},"n":["0p61_1_0p24_0"],"t":20,"s":[0],"e":[100]},{"t":26}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2},"a":{"a":0,"k":[30,30,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.145,-0.39],[0,0],[-3.314,0],[-1.075,1.616],[-2.087,0],[-1.075,1.616],[-2.087,0],[0,3.314],[0,0],[0.416,0]],"o":[[-0.416,0],[0,0],[0,3.314],[2.087,0],[1.075,1.616],[2.087,0],[1.075,1.616],[3.314,0],[0,0],[-0.147,-0.39],[0,0]],"v":[[-12.307,-7],[-13.243,-6.351],[-16,1],[-10,7],[-5,4.318],[0,7],[5,4.318],[10,7],[16,1],[13.244,-6.351],[12.307,-7]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.682,0.878,0.69,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[35,25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"Main","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Icon_Shop_Normal","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.6],"y":[0]},"n":["0p8_1_0p6_0"],"t":0,"s":[100],"e":[6]},{"t":10}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2},"a":{"a":0,"k":[30,30,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,3.313],[0,0],[-0.846,0],[0,0],[-0.285,-0.796],[0,0],[3.313,0],[1.075,1.617],[2.087,0],[1.075,1.617],[2.087,0],[1.075,1.617],[2.087,0]],"o":[[0,0],[0.284,-0.796],[0,0],[0.845,0],[0,0],[0,3.313],[-2.087,0],[-1.075,1.617],[-2.087,0],[-1.075,1.617],[-2.087,0],[-1.075,1.617],[-3.313,0]],"v":[[-21,-4],[-16.474,-16.673],[-14.59,-18],[14.591,-18],[16.474,-16.673],[21,-4],[15,2],[10,-0.682],[5,2],[0,-0.682],[-5,2],[-10,-0.682],[-15,2]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[1.104,0],[0,0],[0,1.104],[0,0]],"o":[[0,0],[0,1.104],[0,0],[-1.104,0],[0,0],[0,0]],"v":[[16,10],[16,16],[14,18],[-14,18],[-16,16],[-16,2]],"c":false},"ix":2},"nm":"路径 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"st","c":{"a":0,"k":[0.498,0.498,0.498,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"ix":5},"lc":2,"lj":2,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[30,30],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"Line","np":4,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/Example/Classes/Other/LottieResources/green_lottie_tab_mine.json b/Example/Classes/Other/LottieResources/green_lottie_tab_mine.json new file mode 100755 index 00000000..525d6d8d --- /dev/null +++ b/Example/Classes/Other/LottieResources/green_lottie_tab_mine.json @@ -0,0 +1 @@ +{"v":"5.1.16","fr":30,"ip":0,"op":30,"w":60,"h":60,"nm":"Tab_Mine_Active","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Icon_Mine_Active_Line","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2},"a":{"a":0,"k":[30,30,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,1.407],[5.523,0],[0,-5.523],[-5.523,0],[0,-9.942],[0,0],[-3.893,3.302]],"o":[[0.524,-1.215],[0,-5.523],[-5.523,0],[0,5.523],[9.942,0],[0,0],[0,-5.505],[0,0]],"v":[[9.185,-5.039],[10,-9],[0,-19],[-10,-9],[0,1],[18,19],[-18,19],[-11.636,5.266]],"c":false},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.325,0.843,0.416,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"ix":5},"lc":2,"lj":2,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[30,29],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.955],"y":[1]},"o":{"x":[1],"y":[0]},"n":["0p955_1_1_0"],"t":0,"s":[0],"e":[38]},{"i":{"x":[0.964],"y":[1]},"o":{"x":[1],"y":[0]},"n":["0p964_1_1_0"],"t":16,"s":[38],"e":[100]},{"t":26}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"修剪路径 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Icon_Mine_Active_Main","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.76],"y":[1]},"o":{"x":[0.24],"y":[0]},"n":["0p76_1_0p24_0"],"t":20,"s":[0],"e":[100]},{"t":26}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2},"a":{"a":0,"k":[30,30,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-8.284],[0,0],[-8.284,0]],"o":[[0,0],[0,-8.284],[8.284,0]],"v":[[15,16.5],[-15,16.5],[0,1.5]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[3.866,0],[0,3.866],[-3.866,0],[0,-3.866]],"o":[[-3.866,0],[0,-3.866],[3.866,0],[0,3.866]],"v":[[0,-2.5],[-7,-9.5],[0,-16.5],[7,-9.5]],"c":true},"ix":2},"nm":"路径 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.682,0.878,0.69,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[33,32.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 2","np":4,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Icon_Mine_Normal","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"n":["0p8_1_0p167_0p167"],"t":0,"s":[100],"e":[6]},{"t":10}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2},"a":{"a":0,"k":[30,30,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,1.407],[5.523,0],[0,-5.523],[-5.523,0],[0,-9.942],[0,0],[-3.893,3.302]],"o":[[0.524,-1.215],[0,-5.523],[-5.523,0],[0,5.523],[9.942,0],[0,0],[0,-5.505],[0,0]],"v":[[9.185,-5.039],[10,-9],[0,-19],[-10,-9],[0,1],[18,19],[-18,19],[-11.636,5.266]],"c":false},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.498,0.498,0.498,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"ix":5},"lc":2,"lj":2,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[30,29],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/Example/Classes/Other/LottieResources/green_lottie_tab_news.json b/Example/Classes/Other/LottieResources/green_lottie_tab_news.json new file mode 100755 index 00000000..5d53b4f4 --- /dev/null +++ b/Example/Classes/Other/LottieResources/green_lottie_tab_news.json @@ -0,0 +1 @@ +{"v":"5.1.16","fr":30,"ip":0,"op":30,"w":60,"h":60,"nm":"Tab_Knowledge_Active","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Icon_Knowledge_Active_Line_A","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2},"a":{"a":0,"k":[30,30,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,-2.2],[2.019,-1.142]],"o":[[0,0],[0,0],[0,0],[0,0],[1.974,0.669],[0,2.231],[0,0]],"v":[[-1.74,7],[-21.74,-1],[-1.74,-9],[18.26,-1],[18.346,-1],[21.74,3.737],[18.26,9]],"c":false},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.325,0.843,0.416,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"ix":5},"lc":2,"lj":2,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[31.74,21],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 2","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.357],"y":[1]},"o":{"x":[0.644],"y":[0]},"n":["0p357_1_0p644_0"],"t":0,"s":[0],"e":[100]},{"t":16}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"修剪路径 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Icon_Knowledge_Active_Line_B","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2},"a":{"a":0,"k":[30,30,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[20,-4],[0,4],[-20,-4]],"c":false},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.325,0.843,0.416,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"ix":5},"lc":2,"lj":2,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[30,34],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"n":["0p2_1_0p4_0"],"t":16,"s":[0],"e":[100]},{"t":28}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"修剪路径 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Icon_Knowledge_Active_Line_C","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2},"a":{"a":0,"k":[30,30,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-2.199],[2.019,-1.142],[0,0],[0,0]],"o":[[1.974,0.669],[0,2.232],[0,0],[0,0],[0,0]],"v":[[18.346,-9],[21.74,-4.264],[18.26,1],[-1.74,9],[-21.74,1]],"c":false},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.325,0.843,0.416,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"ix":5},"lc":2,"lj":2,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[31.74,39],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 3","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.4],"y":[0]},"n":["0p2_1_0p4_0"],"t":20,"s":[0],"e":[100]},{"t":28}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"修剪路径 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Icon_Knowledge_Active_Main","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.76],"y":[1]},"o":{"x":[0.24],"y":[0]},"n":["0p76_1_0p24_0"],"t":20,"s":[0],"e":[100]},{"t":26}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2},"a":{"a":0,"k":[30,30,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-17,-8.001],[-5,-3.501],[-5,16.501],[17,7.501],[17,-10.499],[2.5,-16.501]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.682,0.878,0.69,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[35,31.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 4","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Icon_Knowledge_Normal","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"n":["0p8_1_0p167_0p167"],"t":0,"s":[100],"e":[6]},{"t":10}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2},"a":{"a":0,"k":[30,30,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[20,-4],[0,4],[-20,-4]],"c":false},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.498,0.498,0.498,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"ix":5},"lc":2,"lj":2,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[30,34],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,-2.2],[2.019,-1.142]],"o":[[0,0],[0,0],[0,0],[0,0],[1.974,0.669],[0,2.231],[0,0]],"v":[[-1.74,7],[-21.74,-1],[-1.74,-9],[18.26,-1],[18.346,-1],[21.74,3.737],[18.26,9]],"c":false},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.498,0.498,0.498,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"ix":5},"lc":2,"lj":2,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[31.74,21],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 2","np":2,"cix":2,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,2.232],[1.974,0.669]],"o":[[0,0],[0,0],[2.019,-1.142],[0,-2.199],[0,0]],"v":[[-21.74,1],[-1.74,9],[18.26,1],[21.74,-4.264],[18.346,-9]],"c":false},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.498,0.498,0.498,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"ix":5},"lc":2,"lj":2,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[31.74,39],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 3","np":2,"cix":2,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/Example/Classes/View/CYLPlusButtonSubclass.m b/Example/Classes/View/CYLPlusButtonSubclass.m index 8e1034bd..e7f822d4 100644 --- a/Example/Classes/View/CYLPlusButtonSubclass.m +++ b/Example/Classes/View/CYLPlusButtonSubclass.m @@ -69,11 +69,13 @@ - (instancetype)initWithFrame:(CGRect)frame { */ + (id)plusButton { CYLPlusButtonSubclass *button = [[CYLPlusButtonSubclass alloc] init]; - UIImage *normalButtonImage = [UIImage imageNamed:@"post_normal"]; - UIImage *hlightButtonImage = [UIImage imageNamed:@"post_highlight"]; + UIImage *normalButtonImage = [UIImage imageNamed:@"icon_tabbar_plus"]; + UIImage *hlightButtonImage = [UIImage imageNamed:@"icon_tabbar_plus"]; [button setImage:normalButtonImage forState:UIControlStateNormal]; - [button setImage:hlightButtonImage forState:UIControlStateHighlighted]; - [button setImage:hlightButtonImage forState:UIControlStateSelected]; + [button setImage:[hlightButtonImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] forState:UIControlStateHighlighted]; + [button setImage:[hlightButtonImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] forState:UIControlStateSelected]; + [button setTintColor: [UIColor colorWithRed:0/255.0f green:255/255.0f blue:189/255.0f alpha:1]]; + // UIImage *normalButtonBackImage = [UIImage imageNamed:@"videoback"]; // [button setBackgroundImage:normalButtonBackImage forState:UIControlStateNormal]; // [button setBackgroundImage:normalButtonBackImage forState:UIControlStateSelected]; diff --git a/Example/Images.xcassets/hood-selected.imageset/hood-selected@2x.png b/Example/Images.xcassets/hood-selected.imageset/hood-selected@2x.png deleted file mode 100644 index bec722b8253557250149e8207cceea8bab21c167..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5354 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 IM6N<$f_w40vH$=8 diff --git a/Example/Images.xcassets/hood.imageset/Contents.json b/Example/Images.xcassets/hood.imageset/Contents.json deleted file mode 100644 index 6556052d..00000000 --- a/Example/Images.xcassets/hood.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x", - "filename" : "hood@2x.png" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Example/Images.xcassets/hood.imageset/hood@2x.png b/Example/Images.xcassets/hood.imageset/hood@2x.png deleted file mode 100644 index e5d602901e890044e93a1a15b78ede40516886a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4744 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 G@c#nVdUtLB literal 0 HcmV?d00001 diff --git a/Example/Images.xcassets/icon_tabbar_plus.imageset/icon_tabbar_plus@3x.png b/Example/Images.xcassets/icon_tabbar_plus.imageset/icon_tabbar_plus@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..f50f0da0face13e7541769e066e5607dedd0be6e GIT binary patch literal 7951 zcmZ{Jby!rv*Z*29At4~r2ns0O$P(hx(y??SB^^tL%F-YhbT3lNQqql!gv0{E0!l2f z2rJzkzxDh5y??xay!UzLo@eIHnK}2~nKPgBIk7rgD&(Y$qyPYbTuoI`k04Y36)Gaa z-StC70YTh$e4+UQ0H{eKyRf-KsNe9>Qvm}i(ae7dm4|k!dYS-05ElUO1_l6}5t`oM z0RX5F0I+5a0D#f~fCrx0ExIy<2Sm2&DvAV2xK0&X!wG`KQ`N+WAXWcUlz+I$0RSx3 zYKkum0)B7K1%_x&oe}M<&T-$;v$I7Muf)L~zEryl**E4yK_TKz{noFCIn~JT>kr>E z_{@k)op1P_Ui^``LYR6{rAO!fy&|4Z+51;l3!{UOdp}ILxwnryAFpm)BD+^lH#U&% zbT4S1Ry2zPt5YDq$2L+Z5?wGqx8cPHfr*U2W!>)C8Macxz(P!GLgciLj^|U8%vjgS5zrOty z1+r*Utv$fGfzdhY2XQ{kd#4p5o;nv>s9a6|@ zdX@z>P45VF-H0_D<5W@pQj9?J?nToYvZFMXeXIW9?e!VOe=4of{Ea~82)`2x!8Y)R z;bO(gob@LPp0;(NwV;MR-)>YZE&r;;zv=z#we#?ZzSnzqt~GuHz4aR7zCB;q_nwtW z;sVWrky6@HwaLinbx)iF8yTB9nhUIy`@2lNM~y|#91|um);3KOD2+{&DYR9>NRdfX z^l2Up{wToSO9-y1!FOrag!NJI%dF;JSqB7!q&=!vQ8sT!fJ#n0^o-*$!=Bgd-wW*3 z2jJVM6>o2qv21z!R$2DT%Q&R)mVm52j6a}RuoYUkE%*I!+PLk-oK2_mCyZlD^@bml zWbT(Ij0%k&T43nN3y_cKtHKAY&0l2(;E8+VD(M4IbHVMhmzL1@d znpf4(F1c|M_xvtp$qbQE#pOUsi6FD-`hKu0axFwDlGgA>nN_D!{GUOWiP6?Y;^G8G zC8oQ<$#MbJvvyyF+85)c`jWbDxYgJ%f`Q@Xq>}T$n}p-wPhz~i4f<-u^o&ox+t;WJ zeEdny=xOCU5v7%-TyR1=7j*QU?)IY>;|8lVTzeF=I+s5=r^hUeM>4wI8(Thi)(1i1 zM({Kv?1n35msI*GQpWqV(xlMdaeeZSZ^bQWx)@1U-|Uz0a8h`#Q{i|SntMo5BpP>= z!pmG7sQZgSbl`Z5MT4QnA<_KppF~u4>bB@7}w9y?{Ly8Dr9y zZNyiUE#v859=ApA#jr|C>^clt=M}g5m7yWVsy4FSg@5nRxG}AboS%2!&+}TCD4WO% zS{xLyCzwuWOZ!nMbV{ItP5y^n@AtGgwf(1lN60nfm6xRJBxtj_MuC0TX)1Yb>%-Ti za0#dJrkXW#6p9lrptp@xd7!l_`GBu~&G;l=On9nj!@^}6iTlfyO z7I^jTEt*euji>XcD@>Rg(#)RuZp3wT^yS_V2#W0J?a=66?A9|t!I3W>zfa>)(kvsg zoa>k?Di6Lc!Vc$>18%rB)1>fkk(SQ`wpw6TfQ9?kN}Uo$Mk+No))Sx<5Er zH047I%hP`rD1?Og)+LPyc9y z!p=7PsHruouF6OoifrQ%Gcpc6JNR1*E!Rpj-Zveb_*!m+Gjsjc{33$zI&h)IDqRLg z_u2e8V+UhwfdZ;OJ?_e1E7u^0w~@5x-_Ke~amg#5Cn5O&r{>r$eGsNFM|vO7QP8|K zV>DgaG<5bKV=7xm_I{|R>4}13r$Ryu9H~(s>8qORTBDAlrY9@3I|H54uWPl zxRR}pwS9~pF)Twrf+_LFo6(1#ew8@A3P0eNl^KH4P}K7B;SO%Q!mkYMF+7++*b}`L zoW#7U>XQcU@yWG!(b3Ir5e^c^)!8gE9mZi_d>prwSn!3(RR6ku>`-FJ_VN00(LSAa zR$wHmum^7Ka;7y^6HY&R2ebXOa`~DJ}!@!1{q@#t{dm^>3Jg){9{MypAr9 z7Nb9t%)LEvzgTg|>lDTPr}uN(J3s?}pK{{?FRMlcH8shw&aVgOLonDo zIghtiHowT5!lmb+XTGH1hY}N2R->yl;B<;k&A!0RulB{Jy~SOmgH0B6ZeP6cvabzZ zP%07^$TO!dAlgIGfuv%yna?}(wbQlWjS_S2e74Dy(oEjP%KzMTw$B-ufJ*gaj zYO4|37~)0UoQsrRGs>c&kIyX61lZwo(Vudxvo12#lA95MREss0{1&}JD zQ=djz!$QwWugqao4){gB8{M|^KR(HwF56S4t)hM=!mrLE-@cuGXZ_fCORJW{KLGeK z`Cw46e8)rXZ@K(HuV596Tf+`NV3N>!@$YUpSpXdnO|NdLpxkLT+q{d0-^is#8-~-j2n7@C|gVra1 zO{pi2UYpc#0K4cuTwOK2xjImL8Mk(Vsw<^ruKqPZdTUfOOUywdH)$X4;Yo7j^p!8@ z2Q@N+Ta&;o&@?mVc&-oQ-p7luGuk8#0VX&-9yj%os z6la{2`nh3n)WzRsMww#&{*5a7Wf`)3IQ1#@@*oqd?d;qf8eUmdov@D-id@y3p?q#2 z>uF<4Id!H*82YHU44CzduxB|7&lJ=jf0VVRlC9J1_F8H`rQ$jhB zeiyzy0=3a)$qAi=9b;8kGErn38wQl->BfBFJrd6^0Du>-gxWS1(Hk<$sb?d2C$R-c zX?jXgPyp(?Kp`(V6KJC8g||C4^*q=(YxMT6LNtQ4L}!^dM1@>LbbmjYpxu=jW%JUn zVQrCw=A7k^(CXn74M!EU#iT+ZdbVS;nXo7^cH1H&bo>de&ZVp+RH%1+t91DEbFzX} zIy(L?7yL8N{53BUc0S6(qGlO{nIt!s%P38vrZIeeJMl<$4Kxm?8VFe zb%3@u21f-pmJ?96sNUaf#GV+rP*^N3>>#HuM+oNy+^jU3BuBcOHHHec$KZ%EyUfNV z(@fXkYAufqY%rH)r?C6uOcLLzmlyiWs}O{4aAN0okkX%Jr5V7NH)7~u`=rz-Th#+H+%hzFiA4Wj|4Sy|H@biF(JojR^5GAtZ z7a^4JEw*u9FUO2n*LO^5le_yVWfFJib!oMG^O~9AUFXrRrn<7VE^rJ7lH6geDqP?A ztjx6=m?>$Lqfg9U%GimXyDF~6(+Ala<9ZPhr0lm5x@@1ld|glM;#=dTQv^LOj&NC9 z{7pQT{!qw2orJGdOftyB!*!<4N!B^nByNwpP(MQ!9m11RiXMi^>!ND+xnZx;bVw~% z$2*#{mFvl$VB!ys-JT>^Im^kH<5OMC*+Hk5C>Rw7_HZ?)^tvfe4AeVyw-Eu+&rv64 z&;6d`OebMb<$hs`dpQvcFRF%7twhgv1y}p~id9}#ja6A%L%!+&;=@`r#29)%~O_YT^-;$D3Vo^y1zcFNc3+VB(a#zDS^ZXiXYVH-gd8n-rG|OS zhrY9cJ6xYs(=}<($JuHpP6y+N)}QJeD`PvDyQHbgrpnRwUIX-6xDDParzUMPDp$Kg zP*Tx?=d5C9Hgj(Nb(F(Mveno47{x05$L=XEE;zYGzEyWOWVJ@jH1I1JR#6dEILkIg zh_`@WY3mqnc*ZAb69Tt`Ilrs6H5pW0or5`@nzUaj+Qv(-DQ=OQiHTgxmz5$C?@*Fq z7e0}1G?EL+Q7HXZSeh`O{P_zgx@fWafEPXe`}IbwSE+|kDa9*cj#Ck%GIJB?-2$TU zxNYBH`~B35-lo1SZjv*#pxwf~w?NX;7-v{4f62q#{R5QG zlD)17x1*y=2qRQ#lK@)1`0m_cr*eClCV^BNP^cbEUg|ZeXWcBMaPAOuEsj7WrTg2s<${UEZ zWzfPK_m&RMcKv{``;9XhwNHI4931{X22HpCx!-ah&hyC-Au_K@OIw-t4EM35WX+te{IOwou?i(`TZCU}ZfaDmCpdG>fDXU-h>7;LCn}0u zUhCm+01;pa(cRu9WNhZbBpfaW$RFxsTb=UqA^KDI)vG0hfk-HcPlhJF{)MU7%q;-i zOAX36=-3qdX96S+=?1eVo=SQkC?3P8Mh@O?B}hEv*Nk`&xMWpUhS(=&|6V&C0uC0X zC@Fq@0#hl#a5k6T2dA@8$Uo%Ro|RJ56^nAmP6jZtD6KEQ!hC~KEveNJSuM@QKS;E4 znTSD=U+EcxiTAtbWm1%{imH*%*4!Ks52QnILK^R51S7^z6Ao0b<64Q$VI@hSK}7)j}wlg&=r zR87u@AXBIoJFH6{sSr_ej@Px}3{v{A-LO6-^(GB|jC=lwlpR(!c5W(El@J@acm7*n z@NV(9ki$MU2#^j;`+~BuZ@h)!HU4M?ULA1rUH$Xp4c&k4_Mn=3UGL_2?nU#_ zf!TqU1XfY8|LQfEczpczjeGY-F8+SPs{Rid;!E*&=lawUvl~gJ1l;U3RVcJ*%{}zl zGC)3(S z%s#}XsYnTnj=UjHB^wSrTcw+9PSF)}JsHk2&oqS(N@7b{^Qllb>9-RFm&eZPt->;9 z8fCAIP|@_uiZwXxM$1Z(4zTtqs{v5+6^+Aas~Z>w>dcwrgHJ9 z`ru>Grk6jtvsKl6JTu1|@!=k9clclUSm8YwYk;(n&S5ny7P7)mpOqePHaNX;kK1o6 zWUR4sXL6yQ&cCw0=~G3;X0J4_Z~LcDiPB8vSIjVH2DUjkwHU3aq{qq&yq3R&>*!0D z!?E21=YVdu#DP@%Ne^)`m*2Gec)Ap3X*$S4v>tRFffk&|PxVa=reF;TQaaG=eklkt%(M^Y;eivPaKh4!k%sA%0Ui(-1QhwjO(9D>; zXe!j*(1hLT&)Gxj9^pD2ueVABWd_x+p)1-(YTug58J8&|oF^GXj%Vs>e zEU%(&xBY$YK6q`>wAWsZ7L%ftvHiV^o4Ctc9kdAk6!H>GT%Y-kt*WTV!~!J{gu^9~ zt%=<^QdO)u{_1D!mLWl&wy0X`eT__}g6|Y)`X+9_XV^y$KiX4&dw+7QP$h|iDK!`U zD@vn7&NUrr&I7ySjms!yzUKv!4MJky9Ilg{`QEu2b+(->VCgu!JP+jW$Zw?M=fUrj zuxnV;S9PsqNgne0N+b2!+clx4pJX}n+FJ~MWv|n4FM&Qfjs5sk4635yxZb^advPL} zUCj^pfP(30#)HuMgLLp2CzdMCD{Axlf*ZZ3!5F-qTZSfla!=^#-uLBcw+?@e z&is-eQ|v)PR=n&tF!h=;{&*ezJS*Z4!0Uy?QvVZAKjXi$XE?h)L|lPBbZNpYEop0( z5Lceszu#|7ePWgh#|t4OU5a^#=&Qk);@&=>*G1zdU6qVDL zNj;8^!ws(`-I>=GLs`8R-mJ-hi2X zByy&(>#)?m%Z4a{?e@MK#NVIea1a8Gp(>*FobjF3w3ILYFY6d*sDz4A*?arXt9LF) z!*hd}Q?{$pgU4N{MGzRk(al)7WN z*(hLfg1r!zYYH_ZP)vLbz=z3(QLx8BJ*jLp&S$=uz}%h<(!u@{4UQS-0_64ti3hlQ zsnwrg3hJXLpfO)+eTqA%r%qdHaTO>t?Wzo|bQGRJiGXnQvcpvei``A}inrU(1w0fy z9v7FCqd64|==yIE6H^Le`-1#l?nPv*oi^Xqcp-d_5_x$7;u>zWdi8iom+dKwG>XY> z6rc3`A9thkx2rXz_RP9AC1uSOyc|Ej)02(sgK|P2-Q5g6mJ{FVlfEh!v@~ET&o}n9xrDT5 zu-;0gaKX;&Fts}Uj3TGK%^hOZ(MGUy`Htjj>~g2Wa64pjE^a+EG;wB=z|)S#Y1l9{ zqoMzNcL7)nlIiiJ-GTfcBy916;#hN)hMp!GxJ^Dwfu$w73BAr^2N5JGJ zEjm#DRFiZ)+?va~Y+)XHI?JxG1Cp{`+4%K8?0#0YPHPj*C*s$a?y`PHM*oxsfXB+y716$%FN zS!C8PUj>G)-XTLL$>;^Yg2~k784-AYqrVDfjo5tf({^LeKRmLk9Dt zrOMEbyF?F3%tS;3slv4+k2ecF*ZN&h-OV2%cZSZ-)`65$*QX_G=}I}YsTn>d8y~)Y z@r@t~0pzxTELxI*uXpRwInBJbUS9)!GAws(6OJ>T9uC+HS6ZCh{xr(N0roFe)Hz$6 zYt>GinX#Vj3O+VirM=D~q_;3{%=TB!i-#_En1M4$!wP_}avB}K6YcrJ`&Q}S`FFL0 z_BFG=6sXqJLvp5G4J^_1T6HAEmPXhCDLFC+7Q9`Ni<*8*Mul*6K(EGukD96ui~e#V zZE7Tuh#g}M#Wgl|Wd#`==vJk`6 zD1A#tQ6~w}h||w+48(0)hKdKrLDD-gE>$)a1=3p6GwX8W99}*1xj#me1f-sM(sM2} zRq%)Yu#qX%$WZC?9BpvkejunNNuC>Z$iR?9amC`6Uzw3nU6e}u@x!;RjqY!a9^-w} zak6D)uksIRlT#h~Z`awDl@(>K&T4751PG&r(O#~zR_`Ch)m;P8S1?DJ0$yK25|`6g z$=LUmjjuh(&fA_K03t%dQv5x;3n^$hm?t;#C9`5`O9`3$^ vzHXlXsad_2^n*&+_akB9cAPmy9Y5JKkCO}O|OR*Ac{qFw(#EHQ~ literal 0 HcmV?d00001 diff --git a/Example/MainTabBarController.m b/Example/MainTabBarController.m index 724300f3..6b14ab4a 100644 --- a/Example/MainTabBarController.m +++ b/Example/MainTabBarController.m @@ -84,6 +84,7 @@ - (NSArray *)viewControllersForTabBar { } - (NSArray *)tabBarItemsAttributesForTabBar { + // lottie动画的json文件来自于NorthSea, respect! CGFloat firstXOffset = -12/2; NSDictionary *firstTabBarItemsAttributes = @{ CYLTabBarItemTitle : @"首页", @@ -91,7 +92,7 @@ - (NSArray *)tabBarItemsAttributesForTabBar { CYLTabBarItemSelectedImage : @"home_highlight", /* NSString and UIImage are supported*/ CYLTabBarItemTitlePositionAdjustment: [NSValue valueWithUIOffset:UIOffsetMake(firstXOffset, -3.5)], //第一位 右大,下大 - CYLTabBarLottieURL : [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"tab_home_animate" ofType:@"json"]], + CYLTabBarLottieURL : [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"green_lottie_tab_home" ofType:@"json"]], // CYLTabBarLottieSize: [NSValue valueWithCGSize:CGSizeMake(22, 22)] }; CGFloat secondXOffset = (-25+2)/2; @@ -100,7 +101,7 @@ - (NSArray *)tabBarItemsAttributesForTabBar { CYLTabBarItemImage : [UIImage imageNamed:@"fishpond_normal"], CYLTabBarItemSelectedImage : @"fishpond_highlight", CYLTabBarItemTitlePositionAdjustment: [NSValue valueWithUIOffset:UIOffsetMake(secondXOffset, -3.5)], - CYLTabBarLottieURL : [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"tab_search_animate" ofType:@"json"]], + CYLTabBarLottieURL : [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"green_lottie_tab_discover" ofType:@"json"]], // CYLTabBarLottieSize: [NSValue valueWithCGSize:CGSizeMake(33, 33)] }; @@ -109,7 +110,7 @@ - (NSArray *)tabBarItemsAttributesForTabBar { CYLTabBarItemImage : [UIImage imageNamed:@"message_normal"], CYLTabBarItemSelectedImage : @"message_highlight", CYLTabBarItemTitlePositionAdjustment: [NSValue valueWithUIOffset:UIOffsetMake(-secondXOffset, -3.5)], - CYLTabBarLottieURL : [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"tab_message_animate" ofType:@"json"]], + CYLTabBarLottieURL : [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"green_lottie_tab_news" ofType:@"json"]], // CYLTabBarLottieSize: [NSValue valueWithCGSize:CGSizeMake(44, 44)] }; NSDictionary *fourthTabBarItemsAttributes = @{ @@ -117,7 +118,7 @@ - (NSArray *)tabBarItemsAttributesForTabBar { CYLTabBarItemImage :[UIImage imageNamed:@"account_normal"], CYLTabBarItemSelectedImage : @"account_highlight", CYLTabBarItemTitlePositionAdjustment: [NSValue valueWithUIOffset:UIOffsetMake(-firstXOffset, -3.5)], - CYLTabBarLottieURL : [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"tab_me_animate" ofType:@"json"]], + CYLTabBarLottieURL : [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"green_lottie_tab_mine" ofType:@"json"]], // CYLTabBarLottieSize: [NSValue valueWithCGSize:CGSizeMake(22, 22)] }; NSArray *tabBarItemsAttributes = @[ @@ -143,19 +144,14 @@ - (void)customizeTabBarAppearance { // 普通状态下的文字属性 NSMutableDictionary *normalAttrs = [NSMutableDictionary dictionary]; normalAttrs[NSForegroundColorAttributeName] = [UIColor cyl_systemGrayColor]; + //normalAttrs[NSFontAttributeName] = [UIFont systemFontOfSize:10]; // set the text color for selected state // 选中状态下的文字属性 NSMutableDictionary *selectedAttrs = [NSMutableDictionary dictionary]; selectedAttrs[NSForegroundColorAttributeName] = [UIColor cyl_labelColor]; - - - // set the text Attributes - // 设置文字属性 - UITabBarItem *tabBar = [UITabBarItem appearance]; - [tabBar setTitleTextAttributes:normalAttrs forState:UIControlStateNormal]; - [tabBar setTitleTextAttributes:selectedAttrs forState:UIControlStateSelected]; - + //selectedAttrs[NSFontAttributeName] = [UIFont systemFontOfSize:10]; + // Set the dark color to selected tab (the dimmed background) // TabBarItem选中后的背景颜色 // [self customizeTabBarSelectionIndicatorImage]; @@ -179,18 +175,43 @@ - (void)customizeTabBarAppearance { //Three way to deal with shadow 三种阴影处理方式: // NO.3, without shadow : use -[[CYLTabBarController hideTabBarShadowImageView] in CYLMainRootViewController.m - // NO.2,using Image + + // NO.2,using layer to add shadow. + // CYLTabBarController *tabBarController = [self cyl_tabBarController]; + // tabBarController.tabBar.layer.shadowColor = [UIColor blackColor].CGColor; + // tabBarController.tabBar.layer.shadowRadius = 15.0; + // tabBarController.tabBar.layer.shadowOpacity = 1; + // tabBarController.tabBar.layer.shadowOffset = CGSizeMake(0, 3); + // tabBarController.tabBar.layer.masksToBounds = NO; + // tabBarController.tabBar.clipsToBounds = NO; + + // NO.1,using Image note:recommended.推荐方式 // set the bar shadow image - // This shadow image attribute is ignored if the tab bar does not also have a custom background image.So at least set somthing. -// [[UITabBar appearance] setBackgroundImage:[[UIImage alloc] init]]; -// [[UITabBar appearance] setShadowImage:[UIImage imageNamed:@"TabBar_Bg_Shadow"]]; - // NO.1,using layer to add shadow. note:recommended. 推荐该方式,可以给PlusButton突出的部分也添加上阴影 -// tabBarController.tabBar.layer.shadowColor = [UIColor blackColor].CGColor; -// tabBarController.tabBar.layer.shadowRadius = 15.0; -// tabBarController.tabBar.layer.shadowOpacity = 0.2; -// tabBarController.tabBar.layer.shadowOffset = CGSizeMake(0, 3); -// tabBarController.tabBar.layer.masksToBounds = NO; -// tabBarController.tabBar.clipsToBounds = NO; + // without shadow : use -[[CYLTabBarController hideTabBarShadowImageView] in CYLMainRootViewController.m + if (@available(iOS 13.0, *)) { + UITabBarItemAppearance *inlineLayoutAppearance = [[UITabBarItemAppearance alloc] init]; + // set the text Attributes + // 设置文字属性 + [inlineLayoutAppearance.normal setTitleTextAttributes:normalAttrs]; + [inlineLayoutAppearance.selected setTitleTextAttributes:selectedAttrs]; + + UITabBarAppearance *standardAppearance = [[UITabBarAppearance alloc] init]; + standardAppearance.stackedLayoutAppearance = inlineLayoutAppearance; + standardAppearance.backgroundColor = [UIColor cyl_systemBackgroundColor]; + standardAppearance.shadowImage = [[self class] imageWithColor:[UIColor cyl_systemGrayColor] size:CGSizeMake([UIScreen mainScreen].bounds.size.width, 1)]; + self.tabBar.standardAppearance = standardAppearance; + } else { + // Override point for customization after application launch. + // set the text Attributes + // 设置文字属性 + UITabBarItem *tabBar = [UITabBarItem appearance]; + [tabBar setTitleTextAttributes:normalAttrs forState:UIControlStateNormal]; + [tabBar setTitleTextAttributes:selectedAttrs forState:UIControlStateSelected]; + + // This shadow image attribute is ignored if the tab bar does not also have a custom background image.So at least set somthing. + [[UITabBar appearance] setBackgroundImage:[[UIImage alloc] init]]; + [[UITabBar appearance] setShadowImage:[[self class] imageWithColor:[UIColor cyl_systemGrayColor] size:CGSizeMake([UIScreen mainScreen].bounds.size.width, 1)]]; + } } - (void)updateTabBarCustomizationWhenTabBarItemWidthDidUpdate { @@ -304,7 +325,7 @@ - (void)traitCollectionDidChange:(nullable UITraitCollection *)previousTraitColl - (void)customizeInterface { //设置导航栏 // [self setUpNavigationBarAppearance]; - [self hideTabBarShadowImageView]; + // [self hideTabBarShadowImageView]; //#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000 // if (@available(iOS 13.0, *)) { // tabBarController.overrideUserInterfaceStyle = UIUserInterfaceStyleLight; diff --git a/Podfile b/Podfile index e0f22fcc..d965f7ec 100644 --- a/Podfile +++ b/Podfile @@ -1,14 +1,13 @@ # Uncomment the next line to define a global platform for your project # platform :ios, '9.0' - -source 'git@github.com:CocoaPods/Specs.git' +source 'https://cdn.cocoapods.org/' target 'CYLTabBarController' do # Comment the next line if you don't want to use dynamic frameworks use_frameworks! #pod 'CYLTabBarController', '~> 1.28.5' # 默认不依赖Lottie -pod 'CYLTabBarController/Lottie', '~> 1.28.5' # 依赖Lottie库 +pod 'CYLTabBarController/Lottie', '~> 1.29.0' # 依赖Lottie库 #pod 'CYLTabBarController', :path => './' #pod 'CYLTabBarController/Lottie', :path => './'