文章已遷移到:limingjie.net钳枕,請移步到【開源】iOS字符串縱向循環(huán)滾動控件LMJVerticalScrollText關(guān)注文章最新更新
實現(xiàn)效果:
Demo地址:https://github.com/JerryLMJ/LMJVerticalScrollText
如果此demo幫助到你,請賜給一顆star巩步,你的鼓勵是我coding的動力
這個模塊支持設(shè)置滾動方向(從上到下纸淮、從下到上)、文字顏色大小位置以及停留滾動時間的設(shè)置夫椭。
2019.5.22更新(3.0.0):
全新的3.0版本來啦恩急!??????
為更貼合控件功能杉畜,項目名稱將由LMJScrollTextView2更換為LMJVerticalScrollText
本次更新增加了大家一直要求的cocoapods安裝,并完善了demo模塊的文件結(jié)構(gòu)以及全新的中英文文檔
2018.5.29更新(2.2.2):
本次更新修復(fù)了在xib或storyboard中使用時出現(xiàn)了多個字條的顯示錯誤衷恭;
優(yōu)化Demo演示效果此叠,并添加了在storyboard中使用本控件的演示。
2018.5.16更新(2.2.0):
本次更新支持了文字停留随珠、滾動時間的設(shè)置以及修復(fù)bug:
(1)支持設(shè)置文字停留的時間灭袁,默認為3s
(2)支持設(shè)置文字動畫單次滾動時間,默認為1s
(3)修復(fù)文字滾動時點擊無法響應(yīng)
2018.1.3更新(2.1.0):
本次更新在數(shù)據(jù)源textDataArr中支持了NSAttributedString類型數(shù)據(jù)窗看,使能夠顯示的文字類型更加豐富简卧。
2017.12.28更新(2.0.0):
本次更新在原有的基礎(chǔ)上增加更多滾動方式、屬性設(shè)置以及回調(diào)方法:
(1)由原來的有間隙滾動烤芦,增加到有間隙和無間隙兩種滾動方式。方法分別是startScrollBottomToTopWithSpace析校、startScrollTopToBottomWithSpace构罗、startScrollBottomToTopWithNoSpace铜涉、startScrollTopToBottomWithNoSpace
(2)增加了文字的對齊方式和是否可以響應(yīng)點擊設(shè)置
(3)增加了點擊回調(diào)代理函數(shù)
2017.8.18更新(1.3.5):
修復(fù)了反復(fù)調(diào)用startScrollBottomToTop / startScrollTopToBottom方法會產(chǎn)生異常效果的問題。
2017.8.16更新(1.3.2):
在demo中添加了把控件添加到cell上的測試遂唧。
2017.7.29更新(1.3.1):
修復(fù)app進入后臺后芙代,循環(huán)速度劇增、消耗大量cpu的的問題盖彭。
2017.2.14更新(1.3.0):
修復(fù)進入其他頁面后纹烹,循環(huán)速度劇增、消耗大量cpu的的問題召边。
2017.2.13更新(1.2.0):
添加了一個簡單的代理回調(diào)铺呵,用于返回當前信息的序號。
2017.2.13更新(1.1.0):
有朋友說第一條數(shù)據(jù)走了兩次隧熙,后來查找一下原因發(fā)現(xiàn)是定時器的問題片挂。
修改后取消使用定時器,改用循環(huán)調(diào)用實現(xiàn)贞盯。
歡迎大家在評論區(qū)提出在使用中遇到的問題音念,博主會及時修復(fù)大家提出的問題!
主要實現(xiàn):
#pragma mark - Scroll Action
- (void)scrollWithNoSpaceByDirection:(NSNumber *)direction{
// 處于非當前頁面躏敢,延遲嘗試
if (![self isCurrentViewControllerVisible:[self viewController]]) {
[self performSelector:@selector(scrollWithNoSpaceByDirection:) withObject:direction afterDelay:DelayCallTime];
// 處于當前頁面
}else{
if (_textDataArr.count == 0) {
_isRunning = NO;
return;
}else{
_isRunning = YES;
}
_currentScrollLabel.lmj_text = _textDataArr[_index];
_standbyScrollLabel.lmj_text = _textDataArr[[self nextIndex:_index]];
_standbyScrollLabel.frame = CGRectMake(0, self.lmj_height*direction.integerValue, _standbyScrollLabel.lmj_width, _standbyScrollLabel.lmj_height);
_index = [self nextIndex:_index];
[UIView animateWithDuration:ScrollItemTime animations:^{
_currentScrollLabel.frame = CGRectMake(0, -self.lmj_height*direction.integerValue, _currentScrollLabel.lmj_width, _currentScrollLabel.lmj_height);
_standbyScrollLabel.frame = CGRectMake(0, 0, _standbyScrollLabel.lmj_width, _standbyScrollLabel.lmj_height);
} completion:^(BOOL finished) {
if ([self isCurrentViewControllerVisible:[self viewController]] && self.delegate && [self.delegate respondsToSelector:@selector(scrollTextView2:currentTextIndex:)]) { // 代理回調(diào)
[self.delegate scrollTextView2:self currentTextIndex:_index];
}
UILabel * temp = _currentScrollLabel;
_currentScrollLabel = _standbyScrollLabel;
_standbyScrollLabel = temp;
if (_needStop == NO) {
[self performSelector:@selector(scrollWithNoSpaceByDirection:) withObject:direction afterDelay:ScrollItemTime];
}else{
_isRunning = NO;
}
}];
}
}
- (void)scrollWithSpaceByDirection:(NSNumber *)direction{
// 處于非當前頁面闷愤,延遲嘗試
if (![self isCurrentViewControllerVisible:[self viewController]]) {
[self performSelector:@selector(scrollWithSpaceByDirection:) withObject:direction afterDelay:DelayCallTime];
// 處于當前頁面
}else{
if (_textDataArr.count == 0) {
_isRunning = NO;
return;
}else{
_isRunning = YES;
}
_currentScrollLabel.lmj_text = _textDataArr[_index];
_currentScrollLabel.frame = CGRectMake(0, 0, _currentScrollLabel.lmj_width, _currentScrollLabel.lmj_height);
[UIView animateWithDuration:ScrollItemTime animations:^{
_currentScrollLabel.frame = CGRectMake(0, -self.lmj_height*direction.integerValue, _currentScrollLabel.lmj_width, _currentScrollLabel.lmj_height);
} completion:^(BOOL finished) {
_currentScrollLabel.frame = CGRectMake(0, self.lmj_height*direction.integerValue, _currentScrollLabel.lmj_width, _currentScrollLabel.lmj_height);
_index = [self nextIndex:_index];
_currentScrollLabel.lmj_text = _textDataArr[_index];
if ([self isCurrentViewControllerVisible:[self viewController]] && self.delegate && [self.delegate respondsToSelector:@selector(scrollTextView2:currentTextIndex:)]) { // 代理回調(diào)
[self.delegate scrollTextView2:self currentTextIndex:_index];
}
[UIView animateWithDuration:ScrollItemTime animations:^{
_currentScrollLabel.frame = CGRectMake(0, 0, _currentScrollLabel.lmj_width, _currentScrollLabel.lmj_height);
} completion:^(BOOL finished) {
if (_needStop == NO) {
[self performSelector:@selector(scrollWithSpaceByDirection:) withObject:direction afterDelay:ScrollItemTime];
}else{
_isRunning = NO;
}
}];
}];
}
}
Demo地址:
https://github.com/JerryLMJ/LMJVerticalScrollText
如果此demo幫助到你,請賜給一顆star件余,你的鼓勵是我coding的動力
版權(quán)聲明:出自MajorLMJ技術(shù)博客的原創(chuàng)作品 讥脐,轉(zhuǎn)載時必須注明出處及相應(yīng)鏈接!