From 7cfa4790ae309c2a7f730bec55cd6e4039f6f03d Mon Sep 17 00:00:00 2001 From: sky Date: Fri, 12 May 2017 14:54:28 +0800 Subject: [PATCH] =?UTF-8?q?=E5=91=BD=E5=90=8D=E4=BC=98=E5=8C=96=EF=BC=8C?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E4=BC=98=E5=8C=96=EF=BC=8C=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E6=B5=81=E7=A8=8B=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 0 -> 17492 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 37 ++++ .../xcschemes/AutoAdLabelScroll.xcscheme | 111 ++++++++++ .../xcschemes/xcschememanagement.plist | 32 +++ AutoAdLabelScroll/HRAdView.h | 63 +++--- AutoAdLabelScroll/HRAdView.m | 204 +++++++++--------- AutoAdLabelScroll/ViewController.m | 35 +-- 7 files changed, 333 insertions(+), 149 deletions(-) create mode 100644 AutoAdLabelScroll.xcodeproj/project.xcworkspace/xcuserdata/xinqing.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 AutoAdLabelScroll.xcodeproj/xcuserdata/xinqing.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist create mode 100644 AutoAdLabelScroll.xcodeproj/xcuserdata/xinqing.xcuserdatad/xcschemes/AutoAdLabelScroll.xcscheme create mode 100644 AutoAdLabelScroll.xcodeproj/xcuserdata/xinqing.xcuserdatad/xcschemes/xcschememanagement.plist diff --git a/AutoAdLabelScroll.xcodeproj/project.xcworkspace/xcuserdata/xinqing.xcuserdatad/UserInterfaceState.xcuserstate b/AutoAdLabelScroll.xcodeproj/project.xcworkspace/xcuserdata/xinqing.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..a463c172b9dc0a591fbcb338af2957666cfdf743 GIT binary patch literal 17492 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 F{{b|SgU0{> literal 0 HcmV?d00001 diff --git a/AutoAdLabelScroll.xcodeproj/xcuserdata/xinqing.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/AutoAdLabelScroll.xcodeproj/xcuserdata/xinqing.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 0000000..0406f3f --- /dev/null +++ b/AutoAdLabelScroll.xcodeproj/xcuserdata/xinqing.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,37 @@ + + + + + + + + + + + + + diff --git a/AutoAdLabelScroll.xcodeproj/xcuserdata/xinqing.xcuserdatad/xcschemes/AutoAdLabelScroll.xcscheme b/AutoAdLabelScroll.xcodeproj/xcuserdata/xinqing.xcuserdatad/xcschemes/AutoAdLabelScroll.xcscheme new file mode 100644 index 0000000..5db9031 --- /dev/null +++ b/AutoAdLabelScroll.xcodeproj/xcuserdata/xinqing.xcuserdatad/xcschemes/AutoAdLabelScroll.xcscheme @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AutoAdLabelScroll.xcodeproj/xcuserdata/xinqing.xcuserdatad/xcschemes/xcschememanagement.plist b/AutoAdLabelScroll.xcodeproj/xcuserdata/xinqing.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..d6bab5a --- /dev/null +++ b/AutoAdLabelScroll.xcodeproj/xcuserdata/xinqing.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,32 @@ + + + + + SchemeUserState + + AutoAdLabelScroll.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 86C739C31CB4A0FF00E27C05 + + primary + + + 86C739DC1CB4A0FF00E27C05 + + primary + + + 86C739E71CB4A0FF00E27C05 + + primary + + + + + diff --git a/AutoAdLabelScroll/HRAdView.h b/AutoAdLabelScroll/HRAdView.h index 749c479..05f933c 100644 --- a/AutoAdLabelScroll/HRAdView.h +++ b/AutoAdLabelScroll/HRAdView.h @@ -11,72 +11,73 @@ @interface HRAdView : UIView /** - * 广告内容数组 + 当前索引,无内容时为NSNotFound */ -@property (nonatomic, copy) NSArray *adTitles; +@property (nonatomic, assign, readonly) NSUInteger currentIndex; +@property (nonatomic, strong, readonly) UIImageView *iconView; /** * 头部图片 默认为nil */ -@property (nonatomic, strong) UIImage *headImg; - +@property (nonatomic, strong) UIImage *icon; /** * 图片位置 */ -@property (nonatomic, assign) UIEdgeInsets edgeInsets; - +@property (nonatomic, assign) UIEdgeInsets iconInsets; /** - * 广告字体 默认为16号系统字体 + * 广告内容数组 */ -@property (nonatomic, strong) UIFont *labelFont; - +@property (nonatomic, strong) NSArray *texts; /** * 广告字体颜色 默认为黑色 */ -@property (nonatomic, strong) UIColor *color; - +@property (nonatomic, strong) UIColor *textColor; /** - * 轮播时间间隔 默认2s - */ -@property (nonatomic, assign) NSTimeInterval time; - -/** - * 是否开启点击事件 默认为NO + * 广告字体 默认为16号系统字体 */ -@property (nonatomic, assign) BOOL isHaveTouchEvent; - +@property (nonatomic, strong) UIFont *font; /** - * 点击事件响应 + 文字行数 */ -@property (nonatomic, copy) void (^clickAdBlock)(NSUInteger index); - +@property (nonatomic, assign) NSInteger numberOfTextLines; /** * 文本对齐方式 */ @property (nonatomic, assign) NSTextAlignment textAlignment; - /** - 文字左边默认间距 + 文字边距 */ -@property (nonatomic, assign) CGFloat defaultMargin; - +@property (nonatomic, assign) UIEdgeInsets textInsets; /** - 文字行数 + * 轮播时间间隔 默认2s */ -@property (nonatomic, assign) NSInteger numberOfTextLines; +@property (nonatomic, assign) NSTimeInterval duration; +/** + 滚动动画时长 默认1s + */ +@property (nonatomic, assign) NSTimeInterval animateDuration; +/** + * 是否开启点击事件 默认为NO + */ +@property (nonatomic, assign) BOOL touchEnabled; +/** + * 点击事件响应 + */ +@property (nonatomic, copy) void (^clickAdBlock)(NSUInteger index); /** * 开始轮播 */ -- (void)beginScroll; +- (void)startScroll; /** * 关闭轮播 */ -- (void)closeScroll; +- (void)stopScroll; /** * 实例化方法 */ -- (instancetype)initWithTitles:(NSArray *)titles; +- (instancetype)initWithTexts:(NSArray *)titles; + @end diff --git a/AutoAdLabelScroll/HRAdView.m b/AutoAdLabelScroll/HRAdView.m index 59e3063..ba481b7 100644 --- a/AutoAdLabelScroll/HRAdView.m +++ b/AutoAdLabelScroll/HRAdView.m @@ -12,10 +12,11 @@ @interface HRAdView () +@property (nonatomic, assign) NSUInteger currentIndex; /** * 文字广告条前面的图标 */ -@property (nonatomic, strong) UIImageView *headImageView; +@property (nonatomic, strong) UIImageView *iconView; /** 轮流显示的第一个Label @@ -26,7 +27,7 @@ @interface HRAdView () 轮流显示的第二个Label */ @property (nonatomic, strong) UILabel *twoLabel; - +@property (nonatomic, weak) UILabel *currentLabel; /** * 计时器 */ @@ -37,38 +38,32 @@ @interface HRAdView () @implementation HRAdView { - NSUInteger index; CGFloat margin; - BOOL isBegin; } -- (instancetype)initWithTitles:(NSArray *)titles { - - self = [super init]; - +- (instancetype)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; if (self) { margin = 0; self.clipsToBounds = YES; - self.adTitles = titles; - self.headImg = nil; - self.labelFont = [UIFont systemFontOfSize:16]; - self.color = [UIColor blackColor]; - self.time = 2.0f; + self.icon = nil; + self.font = [UIFont systemFontOfSize:16]; + self.textColor = [UIColor blackColor]; + self.duration = 2.0f; + self.animateDuration = 1.f; self.textAlignment = NSTextAlignmentLeft; - self.isHaveTouchEvent = NO; - self.edgeInsets = UIEdgeInsetsZero; - self.defaultMargin = 0; - index = 0; + self.touchEnabled = NO; + self.iconInsets = UIEdgeInsetsZero; + self.textInsets = UIEdgeInsetsZero; + _currentIndex = NSNotFound; - if (!_headImageView) { - _headImageView = [UIImageView new]; + if (!_iconView) { + _iconView = [UIImageView new]; } if (!_oneLabel) { _oneLabel = [self createLabel]; - if (self.adTitles.count > 0) { - _oneLabel.text = [NSString stringWithFormat:@"%@", self.adTitles[index]]; - } [self addSubview:_oneLabel]; } @@ -80,101 +75,106 @@ - (instancetype)initWithTitles:(NSArray *)titles { return self; } +- (instancetype)initWithTexts:(NSArray *)titles { + if ([self init]) { + self.texts = titles; + if (self.texts.count > 0) { + _oneLabel.text = self.texts.firstObject; + _currentIndex = 0; + _currentLabel = _oneLabel; + } + } + + return self; +} + - (UILabel *)createLabel { UILabel *label = [UILabel new]; - label.font = self.labelFont; - label.textColor = self.color; + label.font = self.font; + label.textColor = self.textColor; label.textAlignment = self.textAlignment; label.numberOfLines = self.numberOfTextLines; return label; } +- (void)animateForText:(NSString *)text { + UILabel *willHideLabel = self.currentLabel; + UILabel *willShowLabel = self.currentLabel == self.oneLabel ? self.twoLabel : self.oneLabel; + + willShowLabel.text = text; + [UIView animateWithDuration:self.animateDuration animations:^{ + willShowLabel.frame = CGRectMake(margin, 0, ViewWidth - margin - self.textInsets.right, ViewHeight - self.textInsets.top - self.textInsets.bottom); + willHideLabel.frame = CGRectMake(margin, -ViewHeight, ViewWidth - margin - self.textInsets.right, ViewHeight - self.textInsets.top - self.textInsets.bottom); + } completion:^(BOOL finished) { + willHideLabel.frame = CGRectMake(margin, ViewHeight, ViewWidth - margin - self.textInsets.right, ViewHeight - self.textInsets.top - self.textInsets.bottom); + self.currentLabel = willShowLabel; + }]; +} + - (void)timeRepeat { - if (self.adTitles.count <= 1) { - [self.timer invalidate]; - self.timer = nil; + if (self.texts.count == 0 && _currentIndex != NSNotFound) { + _currentIndex = NSNotFound; + [self animateForText:@""]; return; } - __block UILabel *currentLabel; - __block UILabel *hidenLabel; - __weak typeof(self) weakself = self; - [self.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - if ([obj isKindOfClass:[UILabel class]]) { - UILabel *label = obj; - NSString *string = weakself.adTitles[index]; - if ([label.text isEqualToString:string]) { - currentLabel = label; - }else{ - hidenLabel = label; - } - } - }]; + if (self.texts.count == 1 && _currentIndex != 0) { + _currentIndex = 0; + [self animateForText:self.texts.firstObject]; + return; + } - if (index != self.adTitles.count - 1) { - index++; + if (_currentIndex < self.texts.count - 1) { + _currentIndex ++; } else { - index = 0; + _currentIndex = 0; } - - hidenLabel.text = [NSString stringWithFormat:@"%@", self.adTitles[index]]; - [UIView animateWithDuration:1 animations:^{ - hidenLabel.frame = CGRectMake(margin, 0, ViewWidth - margin, ViewHeight); - currentLabel.frame = CGRectMake(margin, -ViewHeight, ViewWidth - margin, ViewHeight); - } completion:^(BOOL finished) { - currentLabel.frame = CGRectMake(margin, ViewHeight, ViewWidth - margin, ViewHeight); - }]; + [self animateForText:self.texts[_currentIndex]]; } - (void)layoutSubviews { [super layoutSubviews]; - if (self.headImg) { - [self addSubview:self.headImageView]; - - self.headImageView.frame = CGRectMake(self.edgeInsets.left, - self.edgeInsets.top, - ViewHeight - self.edgeInsets.top - self.edgeInsets.bottom, - ViewHeight - self.edgeInsets.top - self.edgeInsets.bottom + if (self.icon) { + [self addSubview:self.iconView]; + self.iconView.frame = CGRectMake(self.iconInsets.left, + self.iconInsets.top, + ViewHeight - self.iconInsets.top - self.iconInsets.bottom, + ViewHeight - self.iconInsets.top - self.iconInsets.bottom ); - margin = CGRectGetMaxX(self.headImageView.frame) + self.defaultMargin; + margin = CGRectGetMaxX(self.iconView.frame) + self.textInsets.left; } else { - if (self.headImageView) { - [self.headImageView removeFromSuperview]; - self.headImageView = nil; + if (self.iconView) { + [self.iconView removeFromSuperview]; + self.iconView = nil; } - margin = self.defaultMargin; + margin = self.textInsets.left; } - self.oneLabel.frame = CGRectMake(margin, 0, ViewWidth - margin, ViewHeight); - self.twoLabel.frame = CGRectMake(margin, ViewHeight, ViewWidth - margin, ViewHeight); + self.oneLabel.frame = CGRectMake(margin, 0, ViewWidth - margin - self.textInsets.right, ViewHeight - self.textInsets.top - self.textInsets.bottom); + self.twoLabel.frame = CGRectMake(margin, ViewHeight, ViewWidth - margin - self.textInsets.right, ViewHeight - self.textInsets.top - self.textInsets.bottom); } -- (NSTimer *)timer { - if (!_timer) { - _timer = [NSTimer timerWithTimeInterval:self.time target:self selector:@selector(timeRepeat) userInfo:self repeats:YES]; +- (void)startScroll { + if (self.timer) { + [self.timer invalidate]; + self.timer = nil; } - return _timer; + self.timer = [NSTimer timerWithTimeInterval:self.duration target:self selector:@selector(timeRepeat) userInfo:self repeats:YES]; + [[NSRunLoop mainRunLoop] addTimer:self.timer forMode:NSDefaultRunLoopMode]; } -- (void)beginScroll { - if (self.timer.isValid) { +- (void)stopScroll { + if (self.timer) { [self.timer invalidate]; self.timer = nil; } - - [[NSRunLoop mainRunLoop]addTimer:self.timer forMode:NSDefaultRunLoopMode]; -} - -- (void)closeScroll { - [self.timer invalidate]; - self.timer = nil; } -- (void)setEdgeInsets:(UIEdgeInsets)edgeInsets { - _edgeInsets = edgeInsets; +- (void)setIconInsets:(UIEdgeInsets)iconInsets { + _iconInsets = iconInsets; } -- (void)setIsHaveTouchEvent:(BOOL)isHaveTouchEvent { +- (void)setTouchEnabled:(BOOL)isHaveTouchEvent { if (isHaveTouchEvent) { self.userInteractionEnabled = YES; UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(clickEvent:)]; @@ -184,18 +184,18 @@ - (void)setIsHaveTouchEvent:(BOOL)isHaveTouchEvent { } } -- (void)setTime:(NSTimeInterval)time { - _time = time; +- (void)setDuration:(NSTimeInterval)time { + _duration = time; if (self.timer.isValid) { [self.timer isValid]; self.timer = nil; } } -- (void)setHeadImg:(UIImage *)headImg { - _headImg = headImg; +- (void)setIcon:(UIImage *)headImg { + _icon = headImg; - self.headImageView.image = headImg; + _iconView.image = headImg; } - (void)setTextAlignment:(NSTextAlignment)textAlignment { @@ -205,16 +205,16 @@ - (void)setTextAlignment:(NSTextAlignment)textAlignment { self.twoLabel.textAlignment = _textAlignment; } -- (void)setColor:(UIColor *)color { - _color = color; - self.oneLabel.textColor = _color; - self.twoLabel.textColor = _color; +- (void)setTextColor:(UIColor *)color { + _textColor = color; + self.oneLabel.textColor = color; + self.twoLabel.textColor = color; } -- (void)setLabelFont:(UIFont *)labelFont { - _labelFont = labelFont; - self.oneLabel.font = _labelFont; - self.twoLabel.font = _labelFont; +- (void)setFont:(UIFont *)labelFont { + _font = labelFont; + self.oneLabel.font = labelFont; + self.twoLabel.font = labelFont; } - (void)setNumberOfTextLines:(NSInteger)numberOfTextLines { @@ -224,17 +224,9 @@ - (void)setNumberOfTextLines:(NSInteger)numberOfTextLines { } - (void)clickEvent:(UITapGestureRecognizer *)tapGestureRecognizer { - [self.adTitles enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - if (index % 2 == 0 && [self.oneLabel.text isEqualToString:obj]) { - if (self.clickAdBlock) { - self.clickAdBlock(index); - } - } else if (index % 2 != 0 && [self.twoLabel.text isEqualToString:obj]) { - if (self.clickAdBlock) { - self.clickAdBlock(index); - } - } - }]; + if (self.clickAdBlock) { + self.clickAdBlock(_currentIndex); + } } diff --git a/AutoAdLabelScroll/ViewController.m b/AutoAdLabelScroll/ViewController.m index e4d8a01..f1c11c3 100644 --- a/AutoAdLabelScroll/ViewController.m +++ b/AutoAdLabelScroll/ViewController.m @@ -21,16 +21,16 @@ - (void)viewDidLoad { [super viewDidLoad]; NSArray *array = @[@"111111111111111111111111111111111111111111111111111",@"22222222",@"33333333"]; - HRAdView * view = [[HRAdView alloc]initWithTitles:array]; + HRAdView * view = [[HRAdView alloc] initWithTexts:array]; view.frame = CGRectMake(5, 64, self.view.frame.size.width-10, 44); view.textAlignment = NSTextAlignmentLeft;//默认 - view.isHaveTouchEvent = YES; - view.labelFont = [UIFont boldSystemFontOfSize:17]; - view.color = [UIColor redColor]; - view.time = 2.0f; - view.defaultMargin = 10; + view.touchEnabled = YES; + view.font = [UIFont boldSystemFontOfSize:17]; + view.textColor = [UIColor redColor]; + view.duration = 3.0f; + view.textInsets = UIEdgeInsetsMake(0, 10, 0, 0); view.numberOfTextLines = 2; - view.edgeInsets = UIEdgeInsetsMake(8, 8,8, 10); + view.iconInsets = UIEdgeInsetsMake(8, 8,8, 10); __weak typeof(self) weakself = self; view.clickAdBlock = ^(NSUInteger index){ DetailViewController *vc = [[DetailViewController alloc]init]; @@ -39,7 +39,7 @@ - (void)viewDidLoad { [weakself.navigationController pushViewController:vc animated:YES]; NSLog(@"%@",array[index]); }; - view.headImg = [UIImage imageNamed:@"laba.png"]; + view.icon = [UIImage imageNamed:@"laba.png"]; [self.view addSubview:view]; self.adView = view; view.backgroundColor = [UIColor whiteColor]; @@ -63,18 +63,29 @@ - (void)viewDidLoad { [self.view addSubview:endScrollBtn]; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(4 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ +// view.texts = @[@"tihuan1", @"tihuan2", @"tihuan3", @"tihuan4", @"tihuan5", @"tihuan6"]; + view.texts = nil; + }); + + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(8 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + view.texts = @[@"tihuan1", @"tihuan2", @"tihuan3", @"tihuan4", @"tihuan5", @"tihuan6"]; + }); + + + // Do any additional setup after loading the view, typically from a nib. } - (void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; - [self.adView beginScroll]; + [self.adView startScroll]; } - (void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; - [self.adView closeScroll]; + [self.adView stopScroll]; } @@ -83,7 +94,7 @@ - (void)startScroll:(UIButton *)sender{ /** * 手动控制滚动 */ - [self.adView beginScroll]; + [self.adView startScroll]; [self scaleTheView:sender]; } @@ -91,7 +102,7 @@ - (void)endScroll:(UIButton *)sender{ /** * 停止滚动 */ - [self.adView closeScroll]; + [self.adView startScroll]; [self scaleTheView:sender]; }