iOS文字滾動效果 之 縱向滾動

文章已遷移到:limingjie.net钳枕,請移步到【開源】iOS字符串縱向循環(huán)滾動控件LMJVerticalScrollText關(guān)注文章最新更新
實現(xiàn)效果:

無間隙從下到上循環(huán)滾動

有間隙從上到下循環(huá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)鏈接!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蛾扇,一起剝皮案震驚了整個濱河市攘烛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌镀首,老刑警劉巖坟漱,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異更哄,居然都是意外死亡芋齿,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門成翩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來觅捆,“玉大人,你說我怎么就攤上這事麻敌≌こ矗” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長赢赊。 經(jīng)常有香客問我乙漓,道長,這世上最難降的妖魔是什么释移? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任叭披,我火速辦了婚禮,結(jié)果婚禮上玩讳,老公的妹妹穿的比我還像新娘涩蜘。我一直安慰自己,他們只是感情好熏纯,可當我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布同诫。 她就那樣靜靜地躺著,像睡著了一般豆巨。 火紅的嫁衣襯著肌膚如雪剩辟。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天往扔,我揣著相機與錄音贩猎,去河邊找鬼。 笑死萍膛,一個胖子當著我的面吹牛吭服,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蝗罗,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼艇棕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了串塑?” 一聲冷哼從身側(cè)響起沼琉,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎桩匪,沒想到半個月后打瘪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡傻昙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年闺骚,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片妆档。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡僻爽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出贾惦,到底是詐尸還是另有隱情胸梆,我是刑警寧澤敦捧,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站乳绕,受9級特大地震影響绞惦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜洋措,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望杰刽。 院中可真熱鬧菠发,春花似錦、人聲如沸贺嫂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽第喳。三九已至糜俗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間曲饱,已是汗流浹背悠抹。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留扩淀,地道東北人楔敌。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像驻谆,于是被迫代替她去往敵國和親卵凑。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,512評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理胜臊,服務(wù)發(fā)現(xiàn)勺卢,斷路器,智...
    卡卡羅2017閱讀 134,599評論 18 139
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫象对、插件黑忱、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,029評論 4 62
  • 一心想著 做個溫柔的媽媽 卻經(jīng)常在不經(jīng)意間 就變成了 咆哮的那個討厭的自己 愛得好無力 過后就追悔莫及 滔滔不絕 ...
    昂格倫閱讀 239評論 0 3
  • 精致的氣質(zhì),它受的是環(huán)境和教育的影響织盼,也最直接反映了一個人的內(nèi)在格局杨何。 精致大概就是如此,時刻保持美好而認真地生活...
    捕風的開訫鬼閱讀 187評論 1 1