iOS - 實現在有限label上 動態顯示所有文字

weixin_33716557發表於2017-01-04

專著:http://www.jianshu.com/p/a490131e00e7

效果如下:

938554-d0c963b4022d0f91.gif

001.gif

點選下載檢視demo

思路

建立一個view 作為所有內容的父控制元件, 並且新增到上面一個 label, 作為顯示文字的載體

UILabel* contentLabel = [[UILabelalloc] init];[contentLabel sizeToFit];contentLabel.backgroundColor= [UIColorclearColor]; _contentLabel = contentLabel; [selfaddSubview:self.contentLabel];

給內容view的layer新增一個mask層, 並且設定其範圍為整個view的bounds, 這樣就讓超出view的內容不會顯示出來

CAShapeLayer* maskLayer = [CAShapeLayerlayer];maskLayer.path= [UIBezierPathbezierPathWithRect:self.bounds].CGPath;self.layer.mask= maskLayer;

給label新增動畫

CAKeyframeAnimation* keyFrame = [CAKeyframeAnimationanimation];keyFrame.keyPath=@"transform.translation.x";keyFrame.values= @[@(0), @(-space), @(0)];keyFrame.repeatCount=NSIntegerMax;keyFrame.duration=self.speed*self.contentLabel.text.length;keyFrame.timingFunctions= @[[CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseInEaseOut], [CAMediaTimingFunctionfunctionWithControlPoints:0:0:0.5:0.5]];keyFrame.delegate=self;[self.contentLabel.layeraddAnimation:keyFrame forKey:nil];

使用方法

// 建立CFDynamicLabel* testLabel = [[CFDynamicLabelalloc] initWithFrame:CGRectMake(100,300,180,21)];// 設定滾動速度testLabel.speed=0.6;[self.viewaddSubview:testLabel];// 設定基本屬性testLabel.text=@"我不想說再見,不說再見,越長大越孤單";testLabel.textColor= [UIColoryellowColor];testLabel.font= [UIFontsystemFontOfSize:23];testLabel.backgroundColor= [UIColorgrayColor];

相關文章