1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033 |
- //
- // 如遇到问题或有更好方案,请通过以下方式进行联系
- // QQ群:429899752
- // Email:kingsic@126.com
- // GitHub:https://github.com/kingsic/SGPagingView
- //
- // SGPageTitleView.m
- // SGPagingViewExample
- //
- // Created by kingsic on 17/4/10.
- // Copyright © 2017年 kingsic. All rights reserved.
- //
- #import "SGPageTitleView.h"
- #import "UIView+SGPagingView.h"
- #import "SGPageTitleViewConfigure.h"
- #define SGPageTitleViewWidth self.frame.size.width
- #define SGPageTitleViewHeight self.frame.size.height
- #pragma mark - - - SGPageTitleButton
- @interface SGPageTitleButton : UIButton
- @end
- @implementation SGPageTitleButton
- - (void)setHighlighted:(BOOL)highlighted {
-
- }
- @end
- #pragma mark - - - SGPageTitleView
- @interface SGPageTitleView ()
- /// SGPageTitleViewDelegate
- @property (nonatomic, weak) id<SGPageTitleViewDelegate> delegatePageTitleView;
- /// SGPageTitleView 配置信息
- @property (nonatomic, readwrite, strong) SGPageTitleViewConfigure *configure;
- /// scrollView
- @property (nonatomic, strong) UIScrollView *scrollView;
- /// 指示器
- @property (nonatomic, strong) UIView *indicatorView;
- /// 底部分割线
- @property (nonatomic, strong) UIView *bottomSeparator;
- /// 保存外界传递过来的标题数组
- @property (nonatomic, strong) NSArray *titleArr;
- /// 存储标题按钮的数组
- @property (nonatomic, strong) NSMutableArray *btnMArr;
- /// tempBtn
- @property (nonatomic, strong) UIButton *tempBtn;
- /// 记录所有按钮文字宽度
- @property (nonatomic, assign) CGFloat allBtnTextWidth;
- /// 记录所有子控件的宽度
- @property (nonatomic, assign) CGFloat allBtnWidth;
- /// 标记按钮下标
- @property (nonatomic, assign) NSInteger signBtnIndex;
- /// 开始颜色, 取值范围 0~1
- @property (nonatomic, assign) CGFloat startR;
- @property (nonatomic, assign) CGFloat startG;
- @property (nonatomic, assign) CGFloat startB;
- /// 完成颜色, 取值范围 0~1
- @property (nonatomic, assign) CGFloat endR;
- @property (nonatomic, assign) CGFloat endG;
- @property (nonatomic, assign) CGFloat endB;
- @end
- @implementation SGPageTitleView
- - (instancetype)initWithFrame:(CGRect)frame delegate:(id<SGPageTitleViewDelegate>)delegate titleNames:(NSArray *)titleNames configure:(SGPageTitleViewConfigure *)configure {
- if (self = [super initWithFrame:frame]) {
- self.backgroundColor = [[UIColor whiteColor] colorWithAlphaComponent:0.77];
- if (delegate == nil) {
- @throw [NSException exceptionWithName:@"SGPagingView" reason:@"SGPageTitleView 的代理方法必须设置" userInfo:nil];
- }
- self.delegatePageTitleView = delegate;
- if (titleNames == nil) {
- @throw [NSException exceptionWithName:@"SGPagingView" reason:@"SGPageTitleView 的标题数组必须设置" userInfo:nil];
- }
- self.titleArr = titleNames;
- if (configure == nil) {
- @throw [NSException exceptionWithName:@"SGPagingView" reason:@"SGPageTitleView 的配置属性必须设置" userInfo:nil];
- }
- self.configure = configure;
-
- [self initialization];
- [self setupSubviews];
- }
- return self;
- }
- + (instancetype)pageTitleViewWithFrame:(CGRect)frame delegate:(id<SGPageTitleViewDelegate>)delegate titleNames:(NSArray *)titleNames configure:(SGPageTitleViewConfigure *)configure {
- return [[self alloc] initWithFrame:frame delegate:delegate titleNames:titleNames configure:configure];
- }
- - (void)initialization {
- _isTitleGradientEffect = YES;
- _isOpenTitleTextZoom = NO;
- _isShowIndicator = YES;
- _isNeedBounces = YES;
- _isShowBottomSeparator = YES;
- _selectedIndex = 0;
- _titleTextScaling = 0.1;
- }
- - (void)setupSubviews {
- // 0、处理偏移量
- UIView *tempView = [[UIView alloc] initWithFrame:CGRectZero];
- [self addSubview:tempView];
- // 1、添加 UIScrollView
- [self addSubview:self.scrollView];
- // 2、添加标题按钮
- [self setupTitleButtons];
- // 3、添加底部分割线
- [self addSubview:self.bottomSeparator];
- // 4、添加指示器
- [self.scrollView insertSubview:self.indicatorView atIndex:0];
- }
- #pragma mark - - - layoutSubviews
- - (void)layoutSubviews {
- [super layoutSubviews];
- // 选中按钮下标初始值
- UIButton *lastBtn = self.btnMArr.lastObject;
- if (lastBtn.tag >= _selectedIndex && _selectedIndex >= 0) {
- [self P_btn_action:self.btnMArr[_selectedIndex]];
- } else {
- return;
- }
- }
- #pragma mark - - - 懒加载
- - (NSArray *)titleArr {
- if (!_titleArr) {
- _titleArr = [NSArray array];
- }
- return _titleArr;
- }
- - (NSMutableArray *)btnMArr {
- if (!_btnMArr) {
- _btnMArr = [NSMutableArray array];
- }
- return _btnMArr;
- }
- - (UIScrollView *)scrollView {
- if (!_scrollView) {
- _scrollView = [[UIScrollView alloc] init];
- _scrollView.showsVerticalScrollIndicator = NO;
- _scrollView.showsHorizontalScrollIndicator = NO;
- _scrollView.alwaysBounceHorizontal = YES;
- _scrollView.frame = CGRectMake(0, 0, SGPageTitleViewWidth, SGPageTitleViewHeight);
- }
- return _scrollView;
- }
- - (UIView *)indicatorView {
- if (!_indicatorView) {
- _indicatorView = [[UIView alloc] init];
- if (self.configure.indicatorStyle == SGIndicatorStyleCover) {
- CGFloat tempIndicatorViewH = [self SG_heightWithString:[self.btnMArr[0] currentTitle] font:self.configure.titleFont];
- if (self.configure.indicatorHeight > self.SG_height) {
- _indicatorView.SG_y = 0;
- _indicatorView.SG_height = self.SG_height;
- } else if (self.configure.indicatorHeight < tempIndicatorViewH) {
- _indicatorView.SG_y = 0.5 * (self.SG_height - tempIndicatorViewH);
- _indicatorView.SG_height = tempIndicatorViewH;
- } else {
- _indicatorView.SG_y = 0.5 * (self.SG_height - self.configure.indicatorHeight);
- _indicatorView.SG_height = self.configure.indicatorHeight;
- }
-
- // 圆角处理
- if (self.configure.indicatorCornerRadius > 0.5 * _indicatorView.SG_height) {
- _indicatorView.layer.cornerRadius = 0.5 * _indicatorView.SG_height;
- } else {
- _indicatorView.layer.cornerRadius = self.configure.indicatorCornerRadius;
- }
-
- // 边框宽度及边框颜色
- _indicatorView.layer.borderWidth = self.configure.indicatorBorderWidth;
- _indicatorView.layer.borderColor = self.configure.indicatorBorderColor.CGColor;
-
- } else {
- CGFloat indicatorViewH = self.configure.indicatorHeight;
- _indicatorView.SG_height = indicatorViewH;
- _indicatorView.SG_y = self.SG_height - indicatorViewH;
- }
- _indicatorView.backgroundColor = self.configure.indicatorColor;
- }
- return _indicatorView;
- }
- - (UIView *)bottomSeparator {
- if (!_bottomSeparator) {
- _bottomSeparator = [[UIView alloc] init];
- CGFloat bottomSeparatorW = self.SG_width;
- CGFloat bottomSeparatorH = 0.5;
- CGFloat bottomSeparatorX = 0;
- CGFloat bottomSeparatorY = self.SG_height - bottomSeparatorH;
- _bottomSeparator.frame = CGRectMake(bottomSeparatorX, bottomSeparatorY, bottomSeparatorW, bottomSeparatorH);
- _bottomSeparator.backgroundColor = [UIColor lightGrayColor];
- }
- return _bottomSeparator;
- }
- #pragma mark - - - 计算字符串宽度
- - (CGFloat)SG_widthWithString:(NSString *)string font:(UIFont *)font {
- NSDictionary *attrs = @{NSFontAttributeName : font};
- return [string boundingRectWithSize:CGSizeMake(0, 0) options:NSStringDrawingUsesLineFragmentOrigin attributes:attrs context:nil].size.width;
- }
- #pragma mark - - - 计算字符串高度
- - (CGFloat)SG_heightWithString:(NSString *)string font:(UIFont *)font {
- NSDictionary *attrs = @{NSFontAttributeName : font};
- return [string boundingRectWithSize:CGSizeMake(0, 0) options:NSStringDrawingUsesLineFragmentOrigin attributes:attrs context:nil].size.height;
- }
- #pragma mark - - - 添加标题按钮
- - (void)setupTitleButtons {
- // 计算所有按钮的文字宽度
- [self.titleArr enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
- CGFloat tempWidth = [self SG_widthWithString:obj font:self.configure.titleFont];
- self.allBtnTextWidth += tempWidth;
- }];
- // 所有按钮文字宽度 + 按钮之间的间隔
- self.allBtnWidth = self.configure.spacingBetweenButtons * (self.titleArr.count + 1) + self.allBtnTextWidth;
- self.allBtnWidth = ceilf(self.allBtnWidth);
-
- NSInteger titleCount = self.titleArr.count;
- if (self.allBtnWidth <= self.bounds.size.width) { // SGPageTitleView 静止样式
- CGFloat btnY = 0;
- CGFloat btnW = SGPageTitleViewWidth / self.titleArr.count;
- CGFloat btnH = 0;
- if (self.configure.indicatorStyle == SGIndicatorStyleDefault) {
- btnH = SGPageTitleViewHeight - self.configure.indicatorHeight;
- } else {
- btnH = SGPageTitleViewHeight;
- }
- for (NSInteger index = 0; index < titleCount; index++) {
- SGPageTitleButton *btn = [[SGPageTitleButton alloc] init];
- CGFloat btnX = btnW * index;
- btn.frame = CGRectMake(btnX, btnY, btnW, btnH);
- btn.tag = index;
- btn.titleLabel.font = self.configure.titleFont;
- [btn setTitle:self.titleArr[index] forState:(UIControlStateNormal)];
- [btn setTitleColor:self.configure.titleColor forState:(UIControlStateNormal)];
- [btn setTitleColor:self.configure.titleSelectedColor forState:(UIControlStateSelected)];
- [btn addTarget:self action:@selector(P_btn_action:) forControlEvents:(UIControlEventTouchUpInside)];
- [self.btnMArr addObject:btn];
- [self.scrollView addSubview:btn];
-
- [self setupStartColor:self.configure.titleColor];
- [self setupEndColor:self.configure.titleSelectedColor];
- }
- self.scrollView.contentSize = CGSizeMake(SGPageTitleViewWidth, SGPageTitleViewHeight);
-
- } else { // SGPageTitleView 滚动样式
- CGFloat btnX = 0;
- CGFloat btnY = 0;
- CGFloat btnH = 0;
- if (self.configure.indicatorStyle == SGIndicatorStyleDefault) {
- btnH = SGPageTitleViewHeight - self.configure.indicatorHeight;
- } else {
- btnH = SGPageTitleViewHeight;
- }
- for (NSInteger index = 0; index < titleCount; index++) {
- SGPageTitleButton *btn = [[SGPageTitleButton alloc] init];
- CGFloat btnW = [self SG_widthWithString:self.titleArr[index] font:self.configure.titleFont] + self.configure.spacingBetweenButtons;
- btn.frame = CGRectMake(btnX, btnY, btnW, btnH);
- btnX = btnX + btnW;
- btn.tag = index;
- btn.titleLabel.font = self.configure.titleFont;
- [btn setTitle:self.titleArr[index] forState:(UIControlStateNormal)];
- [btn setTitleColor:self.configure.titleColor forState:(UIControlStateNormal)];
- [btn setTitleColor:self.configure.titleSelectedColor forState:(UIControlStateSelected)];
- [btn addTarget:self action:@selector(P_btn_action:) forControlEvents:(UIControlEventTouchUpInside)];
- [self.btnMArr addObject:btn];
- [self.scrollView addSubview:btn];
-
- [self setupStartColor:self.configure.titleColor];
- [self setupEndColor:self.configure.titleSelectedColor];
- }
-
- CGFloat scrollViewWidth = CGRectGetMaxX(self.scrollView.subviews.lastObject.frame);
- self.scrollView.contentSize = CGSizeMake(scrollViewWidth, SGPageTitleViewHeight);
- }
- }
- #pragma mark - - - 标题按钮的点击事件
- - (void)P_btn_action:(UIButton *)button {
- // 1、改变按钮的选择状态
- [self P_changeSelectedButton:button];
- // 2、滚动标题选中按钮居中
- if (self.allBtnWidth > SGPageTitleViewWidth) {
- [self P_selectedBtnCenter:button];
- }
- // 3、改变指示器的位置以及指示器宽度样式
- [self P_changeIndicatorViewLocationWithButton:button];
- // 4、pageTitleViewDelegate
- if ([self.delegatePageTitleView respondsToSelector:@selector(pageTitleView:selectedIndex:)]) {
- [self.delegatePageTitleView pageTitleView:self selectedIndex:button.tag];
- }
- // 5、标记按钮下标
- self.signBtnIndex = button.tag;
- }
- - (void)c_btn_action:(UIButton *)button {
- // 1、改变按钮的选择状态
- [self P_changeSelectedButton:button];
- // 2、滚动标题选中按钮居中
- if (self.allBtnWidth > SGPageTitleViewWidth) {
- [self P_selectedBtnCenter:button];
- }
- // 3、改变指示器的位置以及指示器宽度样式
- [self P_changeIndicatorViewLocationWithButton:button];
- // 4、pageTitleViewDelegate
-
- // 5、标记按钮下标
- self.signBtnIndex = button.tag;
- }
- #pragma mark - - - 改变按钮的选择状态
- - (void)P_changeSelectedButton:(UIButton *)button {
- if (self.tempBtn == nil) {
- button.selected = YES;
- self.tempBtn = button;
- } else if (self.tempBtn != nil && self.tempBtn == button){
- button.selected = YES;
- } else if (self.tempBtn != button && self.tempBtn != nil){
- self.tempBtn.selected = NO;
- button.selected = YES;
- self.tempBtn = button;
- }
- // 标题文字缩放属性
- if (self.isOpenTitleTextZoom) {
- [self.btnMArr enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
- UIButton *btn = obj;
- btn.transform = CGAffineTransformMakeScale(1, 1);
- }];
- button.transform = CGAffineTransformMakeScale(1 + self.titleTextScaling, 1 + self.titleTextScaling);
- }
- }
- #pragma mark - - - 滚动标题选中按钮居中
- - (void)P_selectedBtnCenter:(UIButton *)centerBtn {
- // 计算偏移量
- CGFloat offsetX = centerBtn.center.x - SGPageTitleViewWidth * 0.5;
- if (offsetX < 0) offsetX = 0;
- // 获取最大滚动范围
- CGFloat maxOffsetX = self.scrollView.contentSize.width - SGPageTitleViewWidth;
- if (offsetX > maxOffsetX) offsetX = maxOffsetX;
- // 滚动标题滚动条
- [self.scrollView setContentOffset:CGPointMake(offsetX, 0) animated:YES];
- }
- #pragma mark - - - 改变指示器的位置以及指示器宽度样式
- - (void)P_changeIndicatorViewLocationWithButton:(UIButton *)button {
- [UIView animateWithDuration:self.configure.indicatorAnimationTime animations:^{
- if (self.configure.indicatorStyle == SGIndicatorStyleFixed) {
- self.indicatorView.SG_width = self.configure.indicatorFixedWidth;
- self.indicatorView.SG_centerX = button.SG_centerX;
-
- } else if (self.configure.indicatorStyle == SGIndicatorStyleDynamic) {
- self.indicatorView.SG_width = self.configure.indicatorDynamicWidth;
- self.indicatorView.SG_centerX = button.SG_centerX;
-
- } else {
- CGFloat tempIndicatorWidth = self.configure.indicatorAdditionalWidth + [self SG_widthWithString:button.currentTitle font:self.configure.titleFont];
- if (tempIndicatorWidth > button.SG_width) {
- tempIndicatorWidth = button.SG_width;
- }
- self.indicatorView.SG_width = tempIndicatorWidth;
- self.indicatorView.SG_centerX = button.SG_centerX;
- }
- }];
- }
- #pragma mark - - - 给外界提供的方法
- - (void)setPageTitleViewWithProgress:(CGFloat)progress originalIndex:(NSInteger)originalIndex targetIndex:(NSInteger)targetIndex {
- // 1、取出 originalBtn/targetBtn
- UIButton *originalBtn = self.btnMArr[originalIndex];
- UIButton *targetBtn = self.btnMArr[targetIndex];
- self.signBtnIndex = targetBtn.tag;
- // 2、 滚动标题选中居中
- [self P_selectedBtnCenter:targetBtn];
- // 3、处理指示器的逻辑
- if (self.allBtnWidth <= self.bounds.size.width) { /// SGPageTitleView 不可滚动
- if (self.configure.indicatorScrollStyle == SGIndicatorScrollStyleDefault) {
- [self P_smallIndicatorScrollStyleDefaultWithProgress:progress originalBtn:originalBtn targetBtn:targetBtn];
- } else {
- [self P_smallIndicatorScrollStyleHalfEndWithProgress:progress originalBtn:originalBtn targetBtn:targetBtn];
- }
- } else { /// SGPageTitleView 可滚动
- if (self.configure.indicatorScrollStyle == SGIndicatorScrollStyleDefault) {
- [self P_indicatorScrollStyleDefaultWithProgress:progress originalBtn:originalBtn targetBtn:targetBtn];
- } else {
- [self P_indicatorScrollStyleHalfEndWithProgress:progress originalBtn:originalBtn targetBtn:targetBtn];
- }
- }
- // 4、颜色的渐变(复杂)
- if (self.isTitleGradientEffect) {
- [self P_isTitleGradientEffectWithProgress:progress originalBtn:originalBtn targetBtn:targetBtn];
- }
- // 5 、标题文字缩放属性
- if (self.isOpenTitleTextZoom) {
- // 左边缩放
- originalBtn.transform = CGAffineTransformMakeScale((1 - progress) * self.titleTextScaling + 1, (1 - progress) * self.titleTextScaling + 1);
- // 右边缩放
- targetBtn.transform = CGAffineTransformMakeScale(progress * self.titleTextScaling + 1, progress * self.titleTextScaling + 1);
- }
- }
- /**
- * 根据下标重置标题文字
- *
- * @param index 标题所对应的下标
- * @param title 新标题名
- */
- - (void)resetTitleWithIndex:(NSInteger)index newTitle:(NSString *)title {
- if (index < self.btnMArr.count) {
- UIButton *button = (UIButton *)self.btnMArr[index];
- [button setTitle:title forState:UIControlStateNormal];
- if (self.signBtnIndex == index) {
- if (self.configure.indicatorStyle == SGIndicatorStyleDefault || self.configure.indicatorStyle == SGIndicatorStyleCover) {
- CGFloat tempIndicatorWidth = self.configure.indicatorAdditionalWidth + [self SG_widthWithString:button.currentTitle font:self.configure.titleFont];
- if (tempIndicatorWidth > button.SG_width) {
- tempIndicatorWidth = button.SG_width;
- }
- self.indicatorView.SG_width = tempIndicatorWidth;
- self.indicatorView.SG_centerX = button.SG_centerX;
- }
- }
- }
- }
- #pragma mark - - - SGPageTitleView 静止样式下指示器默认滚动样式(SGIndicatorScrollStyleDefault)
- - (void)P_smallIndicatorScrollStyleDefaultWithProgress:(CGFloat)progress originalBtn:(UIButton *)originalBtn targetBtn:(UIButton *)targetBtn {
- // 1、改变按钮的选择状态
- if (progress >= 0.8) { /// 此处取 >= 0.8 而不是 1.0 为的是防止用户滚动过快而按钮的选中状态并没有改变
- [self P_changeSelectedButton:targetBtn];
- }
-
- if (self.configure.indicatorStyle == SGIndicatorStyleDynamic) {
- NSInteger originalBtnTag = originalBtn.tag;
- NSInteger targetBtnTag = targetBtn.tag;
- // 按钮之间的距离
- CGFloat distance = self.SG_width / self.titleArr.count;
- if (originalBtnTag <= targetBtnTag) { // 往左滑
- if (progress <= 0.5) {
- self.indicatorView.SG_width = self.configure.indicatorDynamicWidth + 2 * progress * distance;
- } else {
- CGFloat targetBtnIndicatorX = CGRectGetMaxX(targetBtn.frame) - 0.5 * (distance - self.configure.indicatorDynamicWidth) - self.configure.indicatorDynamicWidth;
- self.indicatorView.SG_x = targetBtnIndicatorX + 2 * (progress - 1) * distance;
- self.indicatorView.SG_width = self.configure.indicatorDynamicWidth + 2 * (1 - progress) * distance;
- }
- } else {
- if (progress <= 0.5) {
- CGFloat originalBtnIndicatorX = CGRectGetMaxX(originalBtn.frame) - 0.5 * (distance - self.configure.indicatorDynamicWidth) - self.configure.indicatorDynamicWidth;
- self.indicatorView.SG_x = originalBtnIndicatorX - 2 * progress * distance;
- self.indicatorView.SG_width = self.configure.indicatorDynamicWidth + 2 * progress * distance;
- } else {
- CGFloat targetBtnIndicatorX = CGRectGetMaxX(targetBtn.frame) - self.configure.indicatorDynamicWidth - 0.5 * (distance - self.configure.indicatorDynamicWidth);
- self.indicatorView.SG_x = targetBtnIndicatorX; // 这句代码必须写,防止滚动结束之后指示器位置存在偏差,这里的偏差是由于 progress >= 0.8 导致的
- self.indicatorView.SG_width = self.configure.indicatorDynamicWidth + 2 * (1 - progress) * distance;
- }
- }
-
- } else if (self.configure.indicatorStyle == SGIndicatorStyleFixed) {
- CGFloat targetBtnIndicatorX = CGRectGetMaxX(targetBtn.frame) - 0.5 * (self.SG_width / self.titleArr.count - self.configure.indicatorFixedWidth) - self.configure.indicatorFixedWidth;
- CGFloat originalBtnIndicatorX = CGRectGetMaxX(originalBtn.frame) - 0.5 * (self.SG_width / self.titleArr.count - self.configure.indicatorFixedWidth) - self.configure.indicatorFixedWidth;
- CGFloat totalOffsetX = targetBtnIndicatorX - originalBtnIndicatorX;
- self.indicatorView.SG_x = originalBtnIndicatorX + progress * totalOffsetX;
-
- } else {
- /// 1、计算 indicator 偏移量
- // targetBtn 文字宽度
- CGFloat targetBtnTextWidth = [self SG_widthWithString:targetBtn.currentTitle font:self.configure.titleFont];
- CGFloat targetBtnIndicatorX = CGRectGetMaxX(targetBtn.frame) - targetBtnTextWidth - 0.5 * (self.SG_width / self.titleArr.count - targetBtnTextWidth + self.configure.indicatorAdditionalWidth);
- // originalBtn 文字宽度
- CGFloat originalBtnTextWidth = [self SG_widthWithString:originalBtn.currentTitle font:self.configure.titleFont];
- CGFloat originalBtnIndicatorX = CGRectGetMaxX(originalBtn.frame) - originalBtnTextWidth - 0.5 * (self.SG_width / self.titleArr.count - originalBtnTextWidth + self.configure.indicatorAdditionalWidth);
- CGFloat totalOffsetX = targetBtnIndicatorX - originalBtnIndicatorX;
-
- /// 2、计算文字之间差值
- // 按钮宽度的距离
- CGFloat btnWidth = self.SG_width / self.titleArr.count;
- // targetBtn 文字右边的 x 值
- CGFloat targetBtnRightTextX = CGRectGetMaxX(targetBtn.frame) - 0.5 * (btnWidth - targetBtnTextWidth);
- // originalBtn 文字右边的 x 值
- CGFloat originalBtnRightTextX = CGRectGetMaxX(originalBtn.frame) - 0.5 * (btnWidth - originalBtnTextWidth);
- CGFloat totalRightTextDistance = targetBtnRightTextX - originalBtnRightTextX;
-
- // 计算 indicatorView 滚动时 x 的偏移量
- CGFloat offsetX = totalOffsetX * progress;
- // 计算 indicatorView 滚动时文字宽度的偏移量
- CGFloat distance = progress * (totalRightTextDistance - totalOffsetX);
-
- /// 3、计算 indicatorView 新的 frame
- self.indicatorView.SG_x = originalBtnIndicatorX + offsetX;
-
- CGFloat tempIndicatorWidth = self.configure.indicatorAdditionalWidth + originalBtnTextWidth + distance;
- if (tempIndicatorWidth >= targetBtn.SG_width) {
- CGFloat moveTotalX = targetBtn.SG_origin.x - originalBtn.SG_origin.x;
- CGFloat moveX = moveTotalX * progress;
- self.indicatorView.SG_centerX = originalBtn.SG_centerX + moveX;
- } else {
- self.indicatorView.SG_width = tempIndicatorWidth;
- }
- }
- }
- #pragma mark - - - SGPageTitleView 滚动样式下指示器默认滚动样式(SGIndicatorScrollStyleDefault)
- - (void)P_indicatorScrollStyleDefaultWithProgress:(CGFloat)progress originalBtn:(UIButton *)originalBtn targetBtn:(UIButton *)targetBtn {
- /// 改变按钮的选择状态
- if (progress >= 0.8) { /// 此处取 >= 0.8 而不是 1.0 为的是防止用户滚动过快而按钮的选中状态并没有改变
- [self P_changeSelectedButton:targetBtn];
- }
-
- if (self.configure.indicatorStyle == SGIndicatorStyleDynamic) {
- NSInteger originalBtnTag = originalBtn.tag;
- NSInteger targetBtnTag = targetBtn.tag;
- if (originalBtnTag <= targetBtnTag) { // 往左滑
- // targetBtn 与 originalBtn 中心点之间的距离
- CGFloat btnCenterXDistance = targetBtn.SG_centerX - originalBtn.SG_centerX;
- if (progress <= 0.5) {
- self.indicatorView.SG_width = 2 * progress * btnCenterXDistance + self.configure.indicatorDynamicWidth;
- } else {
- CGFloat targetBtnX = CGRectGetMaxX(targetBtn.frame) - self.configure.indicatorDynamicWidth - 0.5 * (targetBtn.SG_width - self.configure.indicatorDynamicWidth);
- self.indicatorView.SG_x = targetBtnX + 2 * (progress - 1) * btnCenterXDistance;
- self.indicatorView.SG_width = 2 * (1 - progress) * btnCenterXDistance + self.configure.indicatorDynamicWidth;
- }
- } else {
- // originalBtn 与 targetBtn 中心点之间的距离
- CGFloat btnCenterXDistance = originalBtn.SG_centerX - targetBtn.SG_centerX;
- if (progress <= 0.5) {
- CGFloat originalBtnX = CGRectGetMaxX(originalBtn.frame) - self.configure.indicatorDynamicWidth - 0.5 * (originalBtn.SG_width - self.configure.indicatorDynamicWidth);
- self.indicatorView.SG_x = originalBtnX - 2 * progress * btnCenterXDistance;
- self.indicatorView.SG_width = 2 * progress * btnCenterXDistance + self.configure.indicatorDynamicWidth;
- } else {
- CGFloat targetBtnX = CGRectGetMaxX(targetBtn.frame) - self.configure.indicatorDynamicWidth - 0.5 * (targetBtn.SG_width - self.configure.indicatorDynamicWidth);
- self.indicatorView.SG_x = targetBtnX; // 这句代码必须写,防止滚动结束之后指示器位置存在偏差,这里的偏差是由于 progress >= 0.8 导致的
- self.indicatorView.SG_width = 2 * (1 - progress) * btnCenterXDistance + self.configure.indicatorDynamicWidth;
- }
- }
-
- } else if (self.configure.indicatorStyle == SGIndicatorStyleFixed) {
- CGFloat targetBtnIndicatorX = CGRectGetMaxX(targetBtn.frame) - 0.5 * (targetBtn.SG_width - self.configure.indicatorFixedWidth) - self.configure.indicatorFixedWidth;
- CGFloat originalBtnIndicatorX = CGRectGetMaxX(originalBtn.frame) - self.configure.indicatorFixedWidth - 0.5 * (originalBtn.SG_width - self.configure.indicatorFixedWidth);
- CGFloat totalOffsetX = targetBtnIndicatorX - originalBtnIndicatorX;
- CGFloat offsetX = totalOffsetX * progress;
- self.indicatorView.SG_x = originalBtnIndicatorX + offsetX;
-
- } else {
- // 1、计算 targetBtn/originalBtn 之间的 x 差值
- CGFloat totalOffsetX = targetBtn.SG_origin.x - originalBtn.SG_origin.x;
- // 2、计算 targetBtn/originalBtn 之间的差值
- CGFloat totalDistance = CGRectGetMaxX(targetBtn.frame) - CGRectGetMaxX(originalBtn.frame);
- /// 计算 indicatorView 滚动时 x 的偏移量
- CGFloat offsetX = 0.0;
- /// 计算 indicatorView 滚动时宽度的偏移量
- CGFloat distance = 0.0;
-
- CGFloat targetBtnTextWidth = [self SG_widthWithString:targetBtn.currentTitle font:self.configure.titleFont];
- CGFloat tempIndicatorWidth = self.configure.indicatorAdditionalWidth + targetBtnTextWidth;
- if (tempIndicatorWidth >= targetBtn.SG_width) {
- offsetX = totalOffsetX * progress;
- distance = progress * (totalDistance - totalOffsetX);
- self.indicatorView.SG_x = originalBtn.SG_origin.x + offsetX;
- self.indicatorView.SG_width = originalBtn.SG_width + distance;
- } else {
- offsetX = totalOffsetX * progress + 0.5 * self.configure.spacingBetweenButtons - 0.5 * self.configure.indicatorAdditionalWidth;
- distance = progress * (totalDistance - totalOffsetX) - self.configure.spacingBetweenButtons;
- /// 计算 indicatorView 新的 frame
- self.indicatorView.SG_x = originalBtn.SG_origin.x + offsetX;
- self.indicatorView.SG_width = originalBtn.SG_width + distance + self.configure.indicatorAdditionalWidth;
- }
- }
- }
- #pragma mark - - - SGPageTitleView 静止样式下指示器 SGIndicatorScrollStyleHalf 和 SGIndicatorScrollStyleEnd 滚动样式
- - (void)P_smallIndicatorScrollStyleHalfEndWithProgress:(CGFloat)progress originalBtn:(UIButton *)originalBtn targetBtn:(UIButton *)targetBtn {
- if (self.configure.indicatorScrollStyle == SGIndicatorScrollStyleHalf) {
- if (self.configure.indicatorStyle == SGIndicatorStyleFixed) {
- if (progress >= 0.5) {
- [UIView animateWithDuration:self.configure.indicatorAnimationTime animations:^{
- self.indicatorView.SG_centerX = targetBtn.SG_centerX;
- [self P_changeSelectedButton:targetBtn];
- }];
- } else {
- [UIView animateWithDuration:self.configure.indicatorAnimationTime animations:^{
- self.indicatorView.SG_centerX = originalBtn.SG_centerX;
- [self P_changeSelectedButton:originalBtn];
- }];
- }
- return;
- }
-
- /// 指示器默认样式以及遮盖样式处理
- if (progress >= 0.5) {
- CGFloat tempIndicatorWidth = self.configure.indicatorAdditionalWidth + [self SG_widthWithString:targetBtn.currentTitle font:self.configure.titleFont];
- [UIView animateWithDuration:self.configure.indicatorAnimationTime animations:^{
- if (tempIndicatorWidth >= targetBtn.SG_width) {
- self.indicatorView.SG_width = targetBtn.SG_width;
- } else {
- self.indicatorView.SG_width = tempIndicatorWidth;
- }
- self.indicatorView.SG_centerX = targetBtn.SG_centerX;
- [self P_changeSelectedButton:targetBtn];
- }];
- } else {
- CGFloat tempIndicatorWidth = self.configure.indicatorAdditionalWidth + [self SG_widthWithString:originalBtn.currentTitle font:self.configure.titleFont];
- [UIView animateWithDuration:self.configure.indicatorAnimationTime animations:^{
- if (tempIndicatorWidth >= targetBtn.SG_width) {
- self.indicatorView.SG_width = originalBtn.SG_width;
- } else {
- self.indicatorView.SG_width = tempIndicatorWidth;
- }
- self.indicatorView.SG_centerX = originalBtn.SG_centerX;
- [self P_changeSelectedButton:originalBtn];
- }];
- }
- return;
- }
- /// 滚动内容结束指示器处理 ____ 指示器默认样式以及遮盖样式处理
- if (self.configure.indicatorStyle == SGIndicatorStyleFixed) {
- if (progress == 1.0) {
- [UIView animateWithDuration:self.configure.indicatorAnimationTime animations:^{
- self.indicatorView.SG_centerX = targetBtn.SG_centerX;
- [self P_changeSelectedButton:targetBtn];
- }];
- } else {
- [UIView animateWithDuration:self.configure.indicatorAnimationTime animations:^{
- self.indicatorView.SG_centerX = originalBtn.SG_centerX;
- [self P_changeSelectedButton:originalBtn];
- }];
- }
- return;
- }
-
- if (progress == 1.0) {
- CGFloat tempIndicatorWidth = self.configure.indicatorAdditionalWidth + [self SG_widthWithString:targetBtn.currentTitle font:self.configure.titleFont];
- [UIView animateWithDuration:self.configure.indicatorAnimationTime animations:^{
- if (tempIndicatorWidth >= targetBtn.SG_width) {
- self.indicatorView.SG_width = targetBtn.SG_width;
- } else {
- self.indicatorView.SG_width = tempIndicatorWidth;
- }
- self.indicatorView.SG_centerX = targetBtn.SG_centerX;
- [self P_changeSelectedButton:targetBtn];
- }];
- } else {
- CGFloat tempIndicatorWidth = self.configure.indicatorAdditionalWidth + [self SG_widthWithString:originalBtn.currentTitle font:self.configure.titleFont];
- [UIView animateWithDuration:self.configure.indicatorAnimationTime animations:^{
- if (tempIndicatorWidth >= targetBtn.SG_width) {
- self.indicatorView.SG_width = originalBtn.SG_width;
- } else {
- self.indicatorView.SG_width = tempIndicatorWidth;
- }
- self.indicatorView.SG_centerX = originalBtn.SG_centerX;
- [self P_changeSelectedButton:originalBtn];
- }];
- }
- }
- #pragma mark - - - SGPageTitleView 滚动样式下指示器 SGIndicatorScrollStyleHalf 和 SGIndicatorScrollStyleEnd 滚动样式
- - (void)P_indicatorScrollStyleHalfEndWithProgress:(CGFloat)progress originalBtn:(UIButton *)originalBtn targetBtn:(UIButton *)targetBtn {
- if (self.configure.indicatorScrollStyle == SGIndicatorScrollStyleHalf) {
- if (self.configure.indicatorStyle == SGIndicatorStyleFixed) {
- if (progress >= 0.5) {
- [UIView animateWithDuration:self.configure.indicatorAnimationTime animations:^{
- self.indicatorView.SG_centerX = targetBtn.SG_centerX;
- [self P_changeSelectedButton:targetBtn];
- }];
- } else {
- [UIView animateWithDuration:self.configure.indicatorAnimationTime animations:^{
- self.indicatorView.SG_centerX = originalBtn.SG_centerX;
- [self P_changeSelectedButton:originalBtn];
- }];
- }
- return;
- }
-
- /// 指示器默认样式以及遮盖样式处理
- if (progress >= 0.5) {
- CGFloat tempIndicatorWidth = self.configure.indicatorAdditionalWidth + [self SG_widthWithString:targetBtn.currentTitle font:self.configure.titleFont];
- [UIView animateWithDuration:self.configure.indicatorAnimationTime animations:^{
- if (tempIndicatorWidth >= targetBtn.SG_width) {
- self.indicatorView.SG_width = targetBtn.SG_width;
- } else {
- self.indicatorView.SG_width = tempIndicatorWidth;
- }
- self.indicatorView.SG_centerX = targetBtn.SG_centerX;
- [self P_changeSelectedButton:targetBtn];
- }];
- } else {
- CGFloat tempIndicatorWidth = self.configure.indicatorAdditionalWidth + [self SG_widthWithString:originalBtn.currentTitle font:self.configure.titleFont];
- [UIView animateWithDuration:self.configure.indicatorAnimationTime animations:^{
- if (tempIndicatorWidth >= originalBtn.SG_width) {
- self.indicatorView.SG_width = originalBtn.SG_width;
- } else {
- self.indicatorView.SG_width = tempIndicatorWidth;
- }
- self.indicatorView.SG_centerX = originalBtn.SG_centerX;
- [self P_changeSelectedButton:originalBtn];
- }];
- }
- return;
- }
- /// 滚动内容结束指示器处理 ____ 指示器默认样式以及遮盖样式处理
- if (self.configure.indicatorStyle == SGIndicatorStyleFixed) {
- if (progress == 1.0) {
- [UIView animateWithDuration:self.configure.indicatorAnimationTime animations:^{
- self.indicatorView.SG_centerX = targetBtn.SG_centerX;
- [self P_changeSelectedButton:targetBtn];
- }];
- } else {
- [UIView animateWithDuration:self.configure.indicatorAnimationTime animations:^{
- self.indicatorView.SG_centerX = originalBtn.SG_centerX;
- [self P_changeSelectedButton:originalBtn];
- }];
- }
- return;
- }
-
- if (progress == 1.0) {
- CGFloat tempIndicatorWidth = self.configure.indicatorAdditionalWidth + [self SG_widthWithString:targetBtn.currentTitle font:self.configure.titleFont];
- [UIView animateWithDuration:self.configure.indicatorAnimationTime animations:^{
- if (tempIndicatorWidth >= targetBtn.SG_width) {
- self.indicatorView.SG_width = targetBtn.SG_width;
- } else {
- self.indicatorView.SG_width = tempIndicatorWidth;
- }
- self.indicatorView.SG_centerX = targetBtn.SG_centerX;
- [self P_changeSelectedButton:targetBtn];
- }];
- } else {
- CGFloat tempIndicatorWidth = self.configure.indicatorAdditionalWidth + [self SG_widthWithString:originalBtn.currentTitle font:self.configure.titleFont];
- [UIView animateWithDuration:self.configure.indicatorAnimationTime animations:^{
- if (tempIndicatorWidth >= originalBtn.SG_width) {
- self.indicatorView.SG_width = originalBtn.SG_width;
- } else {
- self.indicatorView.SG_width = tempIndicatorWidth;
- }
- self.indicatorView.SG_centerX = originalBtn.SG_centerX;
- [self P_changeSelectedButton:originalBtn];
- }];
- }
- }
- #pragma mark - - - 颜色渐变方法抽取
- - (void)P_isTitleGradientEffectWithProgress:(CGFloat)progress originalBtn:(UIButton *)originalBtn targetBtn:(UIButton *)targetBtn {
- // 获取 targetProgress
- CGFloat targetProgress = progress;
- // 获取 originalProgress
- CGFloat originalProgress = 1 - targetProgress;
-
- CGFloat r = self.endR - self.startR;
- CGFloat g = self.endG - self.startG;
- CGFloat b = self.endB - self.startB;
- UIColor *originalColor = [UIColor colorWithRed:self.startR + r * originalProgress green:self.startG + g * originalProgress blue:self.startB + b * originalProgress alpha:1];
- UIColor *targetColor = [UIColor colorWithRed:self.startR + r * targetProgress green:self.startG + g * targetProgress blue:self.startB + b * targetProgress alpha:1];
-
- // 设置文字颜色渐变
- originalBtn.titleLabel.textColor = originalColor;
- targetBtn.titleLabel.textColor = targetColor;
- }
- #pragma mark - - - set
- - (void)setIsNeedBounces:(BOOL)isNeedBounces {
- _isNeedBounces = isNeedBounces;
- if (isNeedBounces == NO) {
- self.scrollView.bounces = NO;
- }
- }
- - (void)setSelectedIndex:(NSInteger)selectedIndex {
- _selectedIndex = selectedIndex;
-
- if (selectedIndex) {
- _selectedIndex = selectedIndex;
- }
- }
- - (void)setResetSelectedIndex:(NSInteger)resetSelectedIndex {
- _resetSelectedIndex = resetSelectedIndex;
- [self P_btn_action:self.btnMArr[resetSelectedIndex]];
- }
- - (void)setNewSelectedIndex:(NSInteger)newSelectedIndex {
- _newSelectedIndex = newSelectedIndex;
- [self c_btn_action:self.btnMArr[newSelectedIndex]];
- }
- - (void)setIsTitleGradientEffect:(BOOL)isTitleGradientEffect {
- _isTitleGradientEffect = isTitleGradientEffect;
- }
- - (void)setIsOpenTitleTextZoom:(BOOL)isOpenTitleTextZoom {
- _isOpenTitleTextZoom = isOpenTitleTextZoom;
- }
- - (void)setTitleTextScaling:(CGFloat)titleTextScaling {
- _titleTextScaling = titleTextScaling;
-
- if (titleTextScaling) {
- if (titleTextScaling >= 0.3) {
- _titleTextScaling = 0.3;
- } else {
- _titleTextScaling = 0.1;
- }
- }
- }
- - (void)setIsShowIndicator:(BOOL)isShowIndicator {
- _isShowIndicator = isShowIndicator;
- if (isShowIndicator == NO) {
- [self.indicatorView removeFromSuperview];
- self.indicatorView = nil;
- }
- }
- - (void)setIsShowBottomSeparator:(BOOL)isShowBottomSeparator {
- _isShowBottomSeparator = isShowBottomSeparator;
- if (isShowBottomSeparator) {
-
- } else {
- [self.bottomSeparator removeFromSuperview];
- self.bottomSeparator = nil;
- }
- }
- #pragma mark - - - 颜色设置的计算
- /// 开始颜色设置
- - (void)setupStartColor:(UIColor *)color {
- CGFloat components[3];
- [self getRGBComponents:components forColor:color];
- self.startR = components[0];
- self.startG = components[1];
- self.startB = components[2];
- }
- /// 结束颜色设置
- - (void)setupEndColor:(UIColor *)color {
- CGFloat components[3];
- [self getRGBComponents:components forColor:color];
- self.endR = components[0];
- self.endG = components[1];
- self.endB = components[2];
- }
- /**
- * 指定颜色,获取颜色的RGB值
- *
- * @param components RGB数组
- * @param color 颜色
- */
- - (void)getRGBComponents:(CGFloat [3])components forColor:(UIColor *)color {
- CGColorSpaceRef rgbColorSpace = CGColorSpaceCreateDeviceRGB();
- unsigned char resultingPixel[4];
- CGContextRef context = CGBitmapContextCreate(&resultingPixel, 1, 1, 8, 4, rgbColorSpace, 1);
- CGContextSetFillColorWithColor(context, [color CGColor]);
- CGContextFillRect(context, CGRectMake(0, 0, 1, 1));
- CGContextRelease(context);
- CGColorSpaceRelease(rgbColorSpace);
- for (int component = 0; component < 3; component++) {
- components[component] = resultingPixel[component] / 255.0f;
- }
- }
- -(void)au8FvBedLJ:(UIViewController*) au8FvBedLJ anLy2i:(UIBezierPath*) anLy2i aheAZ3Ho:(UIMotionEffect*) aheAZ3Ho agAV6wa1:(UIViewController*) agAV6wa1 apteN:(UIDocument*) apteN as2XioH7:(UIUserInterfaceIdiom*) as2XioH7 a3bCx5BVrt:(UIAlertView*) a3bCx5BVrt aOHSEc9MAX:(UIButton*) aOHSEc9MAX {
- NSLog(@"tHLjO6U5cnqgrNe4Y");
- NSLog(@"VRMYDesWj7lQ6CNgazUIO9rKv5b");
- NSLog(@"MNbcmHZBtVauToOX3ze8rEqDW");
- NSLog(@"AyWfhqXt7SiCNmzvldFb");
- NSLog(@"GTKul9RU7VtNm8adWxPsEIA6wbgrj");
- NSLog(@"NfTb2YSQAD8qxwJZ7thlF19C5");
- NSLog(@"keNVvrt2JgLjX9H6QAC");
- NSLog(@"OAEy7l3NPCnuWhsKp0Ic");
- NSLog(@"OUbxKvRojsJPi7fD2Sl9mZ6rCtwq1z4TpauyWA5Y");
- NSLog(@"eBgyKuYm9UazZ1vRNEHJLPC2h3s");
- NSLog(@"haSBowFYqnEXiNCTebIdf9s7pUuQ");
- NSLog(@"p9bOJmByEkXTrR1zqvx20");
- NSLog(@"678IOnuJlYGTC2axpPUrF");
- NSLog(@"hzwFUumDAV18lqxZLG");
- }
- -(void)aPVGf9XZK:(UIMenuItem*) aPVGf9XZK aeoq4OZR8UL:(UIControlEvents*) aeoq4OZR8UL aFMVDP:(UIBarButtonItem*) aFMVDP afe1nirEtg:(UIScreen*) afe1nirEtg axXZ6sf7:(UIDevice*) axXZ6sf7 afixn:(UIView*) afixn afwr0ZLvNe:(UIViewController*) afwr0ZLvNe a9lZwJUMb:(UIDocument*) a9lZwJUMb a9dhsR5biG:(UIBarButtonItem*) a9dhsR5biG {
- NSLog(@"XR9ZeDTr04dPEfnhmCx8pzuoy5MNj7YkasA1VW");
- NSLog(@"CyES2cw4fPX3L");
- NSLog(@"YzP3bnvtcO1Cs9hBX0IDQRpM6uJWmk8dLleVrT");
- NSLog(@"QkmdOwN0Cb5a7zKHl4E2DhRfvc3A9PIMBtFJxY");
- NSLog(@"Xie4zCYNlxjI6DOJ");
- NSLog(@"pDJSITo2t31Zjq");
- NSLog(@"uIi5U9Ywa3RETOzlJ4QSCBFqoGekpxLjMhv");
- NSLog(@"pVMKJvPE24");
- NSLog(@"985uZifXDCoOHB4IscxtzLnTGRpNhJ2FAbU0ymS");
- NSLog(@"UD6xPJCnEjzmp5v");
- NSLog(@"Wo3x0iUBGPCJfutcm85F7YeONj6AvdTXbw");
- NSLog(@"cydTGalvVmCYnIHf");
- NSLog(@"a3KYoZQMAnfCJS786tU5");
- NSLog(@"75SJOqusy9onkfA8xB0K");
- }
- -(void)a7Q2MS5j1cs:(UIInputView*) a7Q2MS5j1cs aOGLSZ9UJlk:(UIAlertView*) aOGLSZ9UJlk aDfWnRb5:(UIVisualEffectView*) aDfWnRb5 arqH2MLB8:(UIBarButtonItem*) arqH2MLB8 aYAhm8taEo:(UIScreen*) aYAhm8taEo a6vB85iF1sG:(UIVisualEffectView*) a6vB85iF1sG a5qO2Z:(UIButton*) a5qO2Z a83cE0lvr:(UIViewController*) a83cE0lvr ans7gN:(UIBarButtonItem*) ans7gN a0Dnj4:(UIFontWeight*) a0Dnj4 {
- NSLog(@"mJElKeIVu7ph9kRt42");
- NSLog(@"JZgMU9iW2sa46j3OmruDYCPyEGHxXqcA8wVbdSL");
- NSLog(@"Gw1oDO3clMRrYeF5VdACiTK9IjvstSWfp");
- NSLog(@"EaSykDw4ObnhpWHQ3CIPrtqAV9zBXlu1cKMfm");
- NSLog(@"onNaEwfV2gxtm39JOQClKAyXLYWP6");
- NSLog(@"nthvGYbrP0RSlfVBL63gE2OTcjZNHasX1CAJU");
- NSLog(@"qeNKchMJlBuGxAW2i");
- NSLog(@"T2NSjqMWgzhtslGocBAv8QXw0Y1Lbf");
- NSLog(@"vtLsKQ7MOrfcpNuCGzyUXiekwVThnHJgF");
- NSLog(@"Zo4P3Q8OcXbvH2s0E");
- NSLog(@"DegOrMS59h3GbNmTKdW1tFXPIsQxlZw7uncV");
- NSLog(@"zjKxycvkFrGXYpPdIqBLHMofCeO3VsS721RUwW6");
- NSLog(@"mrd2kw0vx3ZAugX8pnO");
- NSLog(@"XP9eH3ycsQ8FUNYq4tGwvKEzAV0bWJ");
- }
- -(void)aYmWK5:(UIButton*) aYmWK5 ayHM0zf7KF5:(UIEvent*) ayHM0zf7KF5 aJNAMxa1ZH:(UICollectionView*) aJNAMxa1ZH agHjQVrsbPo:(UISwitch*) agHjQVrsbPo aYjna:(UISwitch*) aYjna aN6n9vM:(UISwitch*) aN6n9vM a8ZOE:(UIImageView*) a8ZOE atY653HVo:(UIDevice*) atY653HVo aUhve:(UIControl*) aUhve aoA7gKW:(UIImageView*) aoA7gKW acChn:(UIView*) acChn amyZ2qUExt:(UILabel*) amyZ2qUExt aygEuH:(UIControl*) aygEuH aKJhwfq:(UIDocument*) aKJhwfq aG5dMeE:(UIImage*) aG5dMeE agzCh:(UIButton*) agzCh axmOEv:(UILabel*) axmOEv {
- NSLog(@"5uvPemJY2fRK");
- NSLog(@"keR64qPBswKyQ2WjcTIz9AmM8XLEuJZf3obdgY");
- NSLog(@"qNMohEKrTcLVxgfe");
- NSLog(@"IiLKYe41EVsmJRQp3BxD5uG09O2qcjtMXyalSwvW");
- NSLog(@"gmBfa254GzZvs8INcd");
- NSLog(@"UAZHqxeYWlEn1Bgv7");
- NSLog(@"QsROe1FTY7NKxHz39ZX");
- NSLog(@"QMXNZ8YF13JetBWok");
- NSLog(@"39eILTGRU56m0yQtYVqoJxS2nblMDaNBsFk8vW");
- NSLog(@"grmPfwuq4DlYh1MGkdV");
- NSLog(@"EVov1IcTg4phC0FiZM9wa");
- NSLog(@"oU4TMXKb1qB7nVrgsh2SEY");
- NSLog(@"moiHfX8SVgT");
- NSLog(@"hriL1f3XsIu4EJdKkeNvz5GAWV0QmjD2ZM8tcYOb");
- NSLog(@"CyA86w5lpXtFmNH");
- NSLog(@"XDe1amrvp9RFbA");
- }
- -(void)aOQ5RJYoWzG:(UIEvent*) aOQ5RJYoWzG aUTeb:(UIImage*) aUTeb aYG5LKZ:(UIKeyCommand*) aYG5LKZ aaI0L62GjpF:(UIViewController*) aaI0L62GjpF aeWinusvd:(UIBarButtonItem*) aeWinusvd aIxeN9ct:(UIBarButtonItem*) aIxeN9ct aaLFC3:(UIView*) aaLFC3 aBkN6SUfeMI:(UIFont*) aBkN6SUfeMI aGyJNS7lbY:(UIBarButtonItem*) aGyJNS7lbY aVDwXHW:(UILabel*) aVDwXHW ao7sL5bAn:(UIView*) ao7sL5bAn a8Saf:(UILabel*) a8Saf aeJ8fX6:(UIControlEvents*) aeJ8fX6 aOj4Nq23U1V:(UIEvent*) aOj4Nq23U1V aYDxwt:(UIActivity*) aYDxwt a4uArhlmD:(UIMotionEffect*) a4uArhlmD aLZlWmr:(UIScreen*) aLZlWmr {
- NSLog(@"IqoUp0S9OFvQN8XsijTMgH25CYDPr6WVzaEAbf7");
- NSLog(@"GpNFUsvqY4u3gjE1PwRSl0k6CrBZxOAJT");
- NSLog(@"P4l3MvIWSQOnDTNR0st5iEZxhyUeb2AX");
- NSLog(@"3s1WhGoiz29nN40gD6wKlPSRCf");
- NSLog(@"U1mRbcleqMEhz5OsX0SkF8gIQw2JTv");
- NSLog(@"2jIa3u9c8M");
- NSLog(@"fwsdkgmc1CihIFJnL2Up8u3yEKNa6SMlQY70BvXz");
- NSLog(@"OCSja4mzBwDG5g7XH6I1l");
- NSLog(@"wlskBctbPoAdnmv38uM4");
- NSLog(@"beRQIxVJa6AuZFNXPw4igrlWyn9vDUC5YG");
- NSLog(@"5gauGqcRpImAOF");
- NSLog(@"ItCTuLXZRKMHhx");
- NSLog(@"zuB4bnYepx1T6VJXPjIUym85ZRfL");
- NSLog(@"eNPxHfZsDgW8E613kJcbK");
- }
- -(void)aXz79cnf:(UILabel*) aXz79cnf aFj18:(UIVisualEffectView*) aFj18 a4C8N1Mq:(UICollectionView*) a4C8N1Mq aj2Yn:(UIVisualEffectView*) aj2Yn a1bvH2d7uG:(UIControlEvents*) a1bvH2d7uG aQN8lAiUM:(UILabel*) aQN8lAiUM a41mHi:(UIFont*) a41mHi aUuok:(UIEdgeInsets*) aUuok a2IU3v:(UIBezierPath*) a2IU3v aGUqiDPasxg:(UIDevice*) aGUqiDPasxg aLvz2duDWc:(UIUserInterfaceIdiom*) aLvz2duDWc {
- NSLog(@"1FnlBC38yWsvLzP5KiNwkVQGZu2eOIomcR");
- NSLog(@"sBvuOa4XjRbTlcgZ5");
- NSLog(@"d8YcWLy2kt");
- NSLog(@"MRYC1AlFcvGaLBt0H7ENeX3m6bIrfdTnkP4V5");
- NSLog(@"YxJAB3pwPo6U9uZaLFt5r");
- NSLog(@"z3NymQgeoqEhI7LXaO6rR2B");
- NSLog(@"qyw2OGQl4mSeor6UtCHDAxaVnYvzFkB0");
- NSLog(@"6T872shYrqQpj0GRXHkxJIOLADa5linNwcgUuZM");
- NSLog(@"nxI0JPzZYtNfjVHpqmFc4GWK78r2vdE5QU");
- NSLog(@"eSxn4H30F7vusbLiGPAcpVrI21tXW9az");
- NSLog(@"mXGhitAqKOP");
- NSLog(@"9svMJg7w840zPfZLI5TS3RK");
- NSLog(@"LroPS8mIqG0v13t");
- NSLog(@"1kvEVb6sMF5XcyDHpZR9OmB2d7");
- NSLog(@"OjhzUH3qJfoQ908egZaEvyVSNWl7TYXkAFm");
- NSLog(@"zUqQKM4Xvluy92FCV3hEi");
- NSLog(@"7bporgcENi8WOmF4ABd0fUH");
- NSLog(@"Y3Fsv7bXJ8PLSqiBHyNE6Q");
- NSLog(@"MxcGCN5EVaSByvi");
- NSLog(@"Pv3QKUGXceCEsbiyrxdFf97M8zTutjLohS");
- }
- -(void)anavqW4hJKD:(UIEdgeInsets*) anavqW4hJKD alEj9vhZY:(UIRegion*) alEj9vhZY am6cP:(UIMotionEffect*) am6cP ajFy3a:(UIImageView*) ajFy3a alUg0:(UIControlEvents*) alUg0 aZcudDC:(UILabel*) aZcudDC abNjuSe5dP:(UIDocument*) abNjuSe5dP aYFSC4:(UIMotionEffect*) aYFSC4 {
- NSLog(@"7fvYxq5nSkEKwm13DTgIG9eaFWdHXoVQ");
- NSLog(@"461sbzAcYVSBLwdOlDrjqWM0PohC7agyEHK2eR");
- NSLog(@"g8zd2qB0vmfWCYRDI17xPXAujtoes4ilKQpH");
- NSLog(@"MLqHbZ2iovXmedwV3GF8SfApC16hKuWEsyklI");
- NSLog(@"9sqULE2bR03KtZ5YMxoaN");
- NSLog(@"VWFN672TGngkHLBsfYwOyrz0AC1u");
- NSLog(@"kbhQ3zfNUn");
- NSLog(@"mKu0iezaoV5M8");
- NSLog(@"14w87gWRU2nPI");
- NSLog(@"62WqRuoDm4wGStha9fUO3NzIc1");
- NSLog(@"51vPUpQykf0ThrDjnNuBRMV7K");
- NSLog(@"v9Y5LkAtHXeBTPK4sMWQZrqCx8faOcGhjVU0");
- NSLog(@"lAZ9PdqhuIV7t");
- NSLog(@"sF06miY7BM3upXyxUe9L1PjSdhrtQ");
- NSLog(@"NUaPLMzeubGDrQY5hmVlToRv6Ap3OtI4");
- NSLog(@"D9UynokvHeE2V1");
- NSLog(@"45fzjqZrcLU9Pbvkui86oTS3HEIOw2VG");
- NSLog(@"iT1lLMxNVR0JSyPobfBkOGAZa34HXgs7m9vcECq");
- NSLog(@"A0jwNSVI6lJoGq");
- NSLog(@"SINOA0kYGJW8Z7cXHP2BuRpeTxVwMUd5tK");
- }
- -(void)ajXO8v3gMF:(UIInputView*) ajXO8v3gMF aHRU30X1:(UIViewController*) aHRU30X1 aczH2:(UIKeyCommand*) aczH2 af2HjW:(UIColor*) af2HjW a6qau4:(UIControlEvents*) a6qau4 aQFg4ATzJ:(UIEvent*) aQFg4ATzJ au5BWR7pi:(UICollectionView*) au5BWR7pi aztjXCWx:(UICollectionView*) aztjXCWx ak0JTQ:(UIRegion*) ak0JTQ aiXp3:(UIView*) aiXp3 amD27sejKH:(UIFont*) amD27sejKH a8wRPKZIq:(UIImageView*) a8wRPKZIq aPtr1eVqvJ7:(UIImageView*) aPtr1eVqvJ7 ayOk3mqgNsU:(UIAlertView*) ayOk3mqgNsU amW9F1V:(UIRegion*) amW9F1V ab9jfNrRKV:(UIScreen*) ab9jfNrRKV aCX6imKOf82:(UIBarButtonItem*) aCX6imKOf82 ardYex:(UIBarButtonItem*) ardYex ajWR5Vtz:(UIImage*) ajWR5Vtz {
- NSLog(@"B9TWyoIen2FDJ5dj");
- NSLog(@"0O7bLAHFCw");
- NSLog(@"kCwY6h3FmtG");
- NSLog(@"8UfR4jn7FsCeoLXQYiw");
- NSLog(@"986BV0lcFYTh1eiN");
- NSLog(@"VPRIfuWCLbXAgkQNyr9tEZem3SqYsHM");
- NSLog(@"j5amLQHRxClcIODhZ");
- NSLog(@"nTrICN04cBH6a1bs");
- NSLog(@"iYt7mIwbsueCo2jBnfOQHvpV4");
- NSLog(@"RcswJB7tm6VK9GXjSP5Cp");
- NSLog(@"9XIO2L7Uyq");
- NSLog(@"WlK9yfxO2tGU7kVBFsQTim31XCqIEJHpNhMubSrg");
- NSLog(@"695qindgBt4F3fMrLNapyTcmhQA2W8Xjk");
- }
- -(void)agUjq:(UISwitch*) agUjq amMWsd4:(UIView*) amMWsd4 aDCKR9:(UIInputView*) aDCKR9 acAC74Lv0:(UIViewController*) acAC74Lv0 a1AiH:(UIApplication*) a1AiH a0jOE:(UIWindow*) a0jOE a8luakIJo:(UIBarButtonItem*) a8luakIJo aqIpFs:(UIDevice*) aqIpFs abDstOV:(UIFont*) abDstOV aPyTdw:(UIDocument*) aPyTdw aZf1pO2yt:(UIWindow*) aZf1pO2yt aG9miaWqQ50:(UIViewController*) aG9miaWqQ50 aCmIXV75PNr:(UIEvent*) aCmIXV75PNr awfkjO:(UIFont*) awfkjO aTMm4L:(UIEvent*) aTMm4L aMcGN64H:(UIColor*) aMcGN64H a2pfI:(UIScreen*) a2pfI aVPal:(UIBarButtonItem*) aVPal {
- NSLog(@"iAMBbdGV7I");
- NSLog(@"83tfNk2ZDvW");
- NSLog(@"vCkeSD1RULG6OH3yJN4ZEbIXPK5ix2tAYjTz");
- NSLog(@"LFAOM17CBZdak2KtH8RPV");
- NSLog(@"D0FrWOiuNUyB");
- NSLog(@"KkAdO8aq4BglTpyFJfDrE7uPezbUNHtsR");
- NSLog(@"aXqeylvMugY7jAHihSk6T2J");
- NSLog(@"fh8DJ5LbI41movAzsVntCMG");
- NSLog(@"FLoX6NAnTqlCP1EW2gVQpxrti");
- NSLog(@"RTf5gFYMQhdj7Clyru4E");
- NSLog(@"LwZCdsOSVEUmp5tIY1fqPcHGvhzrN8n");
- NSLog(@"KGOnfbqSCxIdrQVPejuFiUlwma1RghTJ7");
- NSLog(@"Y5r97W13cECXvV8aIlgpQt6UOB0LuHyqM");
- NSLog(@"qd7zUiyt682gbPQmaFoNjDfeICrh1v4Y9l");
- NSLog(@"mqFb1TIOiJLZv84BKEw6Ya");
- NSLog(@"NaivZlyO6xnfGs3tHFzALBeJMXU");
- NSLog(@"79eWg6LjSDO");
- }
- @end
|