iOS走马灯上下滚动显示文本
来源:互联网 发布:android 移动网络状态 编辑:程序博客网 时间:2024/05/29 14:37
在网上找到的大部分都是横向的走马灯效果,就自己动手谢了一个上下滚动的。说的准确一点的话可能不算走马灯,文本是有停留的,每次显示一条。不停留连续的走马灯效果正在研究,后期补上。
TableViewCell调用
NSArray * arr = @[@"qwer",@"12345",@"asdfg",@"54321",@"zxcvb",@"09877",@"567889"]; dynamicMessageTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:shoppersCell]; if (cell == nil) { cell = [[dynamicMessageTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:shoppersCell dataArray:arr]; } return cell;
Cell
#import "BTableViewCell.h"@interface dynamicMessageTableViewCell : BTableViewCell-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier dataArray:(NSArray *)titleArray;//-(void)info:(NSArray *)titleArray;@end
BBCyclingLabel
#import "dynamicMessageTableViewCell.h"#import "BBCyclingLabel.h"@interface dynamicMessageTableViewCell(){ BBCyclingLabel * _bbCyclingLable; NSArray * _titleArr; UITextField * _text; int a; int _msgCount;}@end@implementation dynamicMessageTableViewCell-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier dataArray:(NSArray *)titleArray{ if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { _text = [[UITextField alloc] initWithFrame:CGRectMake(80, 0, SCREEN_WIDTH-80, 30)]; _titleArr = [[NSArray alloc] init]; _titleArr = titleArray; UIImageView *imagev = [[UIImageView alloc]initWithFrame:CGRectMake(20, 10, 50, 50)]; [imagev setImage:GetImage(@"icon_notice.png")]; [self addSubview:imagev]; [self createUI]; } return self;}-(void)createUI{ _bbCyclingLable = [[BBCyclingLabel alloc]initWithFrame:CGRectMake(80, 0, SCREEN_WIDTH-80, 30) andTransitionType:BBCyclingLabelTransitionEffectScrollUp];// [_text addSubview:_bbCyclingLable];// _text.borderStyle = UITextBorderStyleRoundedRect;// [self addSubview:_text]; [self addSubview:_bbCyclingLable]; NSTimer *time = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(change) userInfo:nil repeats:YES]; [time fire]; a = 0;}-(void)info:(NSArray *)titleArray{ _titleArr = titleArray;}//数组中的内容仅供测试用,具体内容可以通过后台服务器获取或者写死(数据条数可以改变,我写的是3条)-(void)change{ a++; if (0<=a && a<_titleArr.count) { _bbCyclingLable.text = [_titleArr objectAtIndex:a]; }else{ a=0; _bbCyclingLable.text = [_titleArr objectAtIndex:a]; }}
//// Copyright 2012 BiasedBit//// Licensed under the Apache License, Version 2.0 (the "License");// you may not use this file except in compliance with the License.// You may obtain a copy of the License at//// http://www.apache.org/licenses/LICENSE-2.0//// Unless required by applicable law or agreed to in writing, software// distributed under the License is distributed on an "AS IS" BASIS,// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.// See the License for the specific language governing permissions and// limitations under the License.////// Created by Bruno de Carvalho -- @biasedbit / http://biasedbit.com// Copyright (c) 2012 BiasedBit. All rights reserved.//#pragma mark - Enumstypedef enum{ // User must provide pre-transition and transition blocks BBCyclingLabelTransitionEffectCustom = 0, BBCyclingLabelTransitionEffectFadeIn = 1 << 0, BBCyclingLabelTransitionEffectFadeOut = 1 << 1, BBCyclingLabelTransitionEffectCrossFade = BBCyclingLabelTransitionEffectFadeIn | BBCyclingLabelTransitionEffectFadeOut, BBCyclingLabelTransitionEffectZoomIn = 1 << 2, BBCyclingLabelTransitionEffectZoomOut = 1 << 3, BBCyclingLabelTransitionEffectScaleFadeOut = BBCyclingLabelTransitionEffectFadeIn | BBCyclingLabelTransitionEffectFadeOut | BBCyclingLabelTransitionEffectZoomOut, BBCyclingLabelTransitionEffectScaleFadeIn = BBCyclingLabelTransitionEffectFadeIn | BBCyclingLabelTransitionEffectFadeOut | BBCyclingLabelTransitionEffectZoomIn, // These two move the entering label from above/below to center and exiting label up/down without cross-fade // It's a good idea to set the clipsToBounds property of the BBCyclingLabel to true and use this in a confined space BBCyclingLabelTransitionEffectScrollUp = 1 << 4, BBCyclingLabelTransitionEffectScrollDown = 1 << 5, BBCyclingLabelTransitionEffectDefault = BBCyclingLabelTransitionEffectCrossFade} BBCyclingLabelTransitionEffect;#pragma mark - Custom typestypedef void(^BBCyclingLabelPreTransitionBlock)(UILabel* labelToEnter);typedef void(^BBCyclingLabelTransitionBlock)(UILabel* labelToExit, UILabel* labelToEnter);#pragma mark -@interface BBCyclingLabel : UIView#pragma mark Public properties@property(assign, nonatomic) BBCyclingLabelTransitionEffect transitionEffect;@property(copy, nonatomic) BBCyclingLabelPreTransitionBlock preTransitionBlock;@property(copy, nonatomic) BBCyclingLabelTransitionBlock transitionBlock;@property(assign, nonatomic) NSTimeInterval transitionDuration;// Same properties as UILabel, these will be propagated to the underlying labels@property(copy, nonatomic) NSString* text;@property(strong, nonatomic) UIFont* font;@property(strong, nonatomic) UIColor* textColor;@property(strong, nonatomic) UIColor* shadowColor;@property(assign, nonatomic) CGSize shadowOffset;@property(assign, nonatomic) UITextAlignment textAlignment;@property(assign, nonatomic) UILineBreakMode lineBreakMode;@property(assign, nonatomic) NSInteger numberOfLines;@property(assign, nonatomic) BOOL adjustsFontSizeToFitWidth;@property(assign, nonatomic) CGFloat minimumFontSize;@property(assign, nonatomic) UIBaselineAdjustment baselineAdjustment;#pragma mark Creation- (id)initWithFrame:(CGRect)frame andTransitionType:(BBCyclingLabelTransitionEffect)transitionEffect;#pragma mark Public methods/*! Sets the text for the next label and performs a transition between current and next label (if animated is YES) */- (void)setText:(NSString*)text animated:(BOOL)animated;@end
//// Copyright 2012 BiasedBit//// Licensed under the Apache License, Version 2.0 (the "License");// you may not use this file except in compliance with the License.// You may obtain a copy of the License at//// http://www.apache.org/licenses/LICENSE-2.0//// Unless required by applicable law or agreed to in writing, software// distributed under the License is distributed on an "AS IS" BASIS,// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.// See the License for the specific language governing permissions and// limitations under the License.////// Created by Bruno de Carvalho -- @biasedbit / http://biasedbit.com// Copyright (c) 2012 BiasedBit. All rights reserved.//#import "BBCyclingLabel.h"#pragma mark - ConstantsNSTimeInterval const kBBCyclingLabelDefaultTransitionDuration = 0.3;#pragma mark -@interface BBCyclingLabel (){ NSUInteger _currentLabelIndex;}#pragma mark Private properties@property(strong, nonatomic) NSArray* labels;@property(strong, nonatomic) UILabel* currentLabel;#pragma mark Private helpers- (void)setupWithEffect:(BBCyclingLabelTransitionEffect)effect andDuration:(NSTimeInterval)duration;- (void)prepareTransitionBlocks;- (NSUInteger)nextLabelIndex;- (void)resetLabel:(UILabel*)label;@end#pragma mark -@implementation BBCyclingLabel#pragma mark Property synthesizers@synthesize transitionEffect = _transitionEffect;@synthesize preTransitionBlock = _preTransitionBlock;@synthesize transitionBlock = _transitionBlock;@synthesize transitionDuration = _transitionDuration;// Private@synthesize labels = _labels;@synthesize currentLabel = _currentLabel;#pragma mark Creation- (id)initWithFrame:(CGRect)frame{ self = [super initWithFrame:frame]; if (self != nil) { [self setupWithEffect:BBCyclingLabelTransitionEffectDefault andDuration:kBBCyclingLabelDefaultTransitionDuration]; } return self;}- (id)initWithCoder:(NSCoder*)coder{ self = [super initWithCoder:coder]; if (self != nil) { [self setupWithEffect:BBCyclingLabelTransitionEffectDefault andDuration:kBBCyclingLabelDefaultTransitionDuration]; } return self;}- (id)initWithFrame:(CGRect)frame andTransitionType:(BBCyclingLabelTransitionEffect)transitionEffect;{ self = [super initWithFrame:frame]; if (self != nil) { [self setupWithEffect:transitionEffect andDuration:kBBCyclingLabelDefaultTransitionDuration]; } return self;}#pragma mark Manual property accessors- (void)setTransitionEffect:(BBCyclingLabelTransitionEffect)transitionEffect{ _transitionEffect = transitionEffect; [self prepareTransitionBlocks];}- (NSString*)text{ return _currentLabel.text;}- (void)setText:(NSString*)text{ [self setText:text animated:YES];}- (UIFont*)font{ return _currentLabel.font;}- (void)setFont:(UIFont*)font{ for (UILabel* label in _labels) { label.font = font; }}- (UIColor*)textColor{ return _currentLabel.textColor;}- (void)setTextColor:(UIColor*)textColor{ for (UILabel* label in _labels) { label.textColor = textColor; }}- (UIColor*)shadowColor{ return _currentLabel.shadowColor;}- (void)setShadowColor:(UIColor*)shadowColor{ for (UILabel* label in _labels) { label.shadowColor = shadowColor; }}- (CGSize)shadowOffset{ return _currentLabel.shadowOffset;}- (void)setShadowOffset:(CGSize)shadowOffset{ for (UILabel* label in _labels) { label.shadowOffset = shadowOffset; }}- (UITextAlignment)textAlignment{ return _currentLabel.textAlignment;}- (void)setTextAlignment:(UITextAlignment)textAlignment{ for (UILabel* label in _labels) { label.textAlignment = textAlignment; }}- (UILineBreakMode)lineBreakMode{ return _currentLabel.lineBreakMode;}- (void)setLineBreakMode:(UILineBreakMode)lineBreakMode{ for (UILabel* label in _labels) { label.lineBreakMode = lineBreakMode; }}- (NSInteger)numberOfLines{ return _currentLabel.numberOfLines;}- (void)setNumberOfLines:(NSInteger)numberOfLines{ for (UILabel* label in _labels) { label.numberOfLines = numberOfLines; }}- (BOOL)adjustsFontSizeToFitWidth{ return _currentLabel.adjustsFontSizeToFitWidth;}- (void)setAdjustsFontSizeToFitWidth:(BOOL)adjustsFontSizeToFitWidth{ for (UILabel* label in _labels) { label.adjustsFontSizeToFitWidth = adjustsFontSizeToFitWidth; }}- (CGFloat)minimumFontSize{ return _currentLabel.minimumFontSize;}- (void)setMinimumFontSize:(CGFloat)minimumFontSize{ for (UILabel* label in _labels) { label.minimumFontSize = minimumFontSize; }}- (UIBaselineAdjustment)baselineAdjustment{ return _currentLabel.baselineAdjustment;}- (void)setBaselineAdjustment:(UIBaselineAdjustment)baselineAdjustment{ for (UILabel* label in _labels) { label.baselineAdjustment = baselineAdjustment; }}#pragma mark Public methods- (void)setText:(NSString*)text animated:(BOOL)animated{ NSUInteger nextLabelIndex = [self nextLabelIndex]; UILabel* nextLabel = [_labels objectAtIndex:nextLabelIndex]; UILabel* previousLabel = _currentLabel; nextLabel.text = text; // Resetting the label state ensures we can change the transition type without extra code on pre-transition block. // Without it a transition that has no alpha changes would have to ensure alpha = 1 on pre-transition block (as // well as with every other possible animatable property) [self resetLabel:nextLabel]; // Update both current label index and current label pointer self.currentLabel = nextLabel; _currentLabelIndex = nextLabelIndex; // Prepare the next label before the transition animation if (_preTransitionBlock != nil) { _preTransitionBlock(nextLabel); } else { // If no pre-transition block is set, prepare the next label for a cross-fade nextLabel.alpha = 0; } // Unhide the label that's about to be shown nextLabel.hidden = NO; void (^changeBlock)() = ^() { // Perform the user provided changes if (_transitionBlock != nil) { _transitionBlock(previousLabel, nextLabel); } else { // If no transition block is set, perform a simple cross-fade previousLabel.alpha = 0; nextLabel.alpha = 1; } }; void (^completionBlock)(BOOL) = ^(BOOL finished) { if (finished) { // TODO this is kind of bugged since all transitions that include affine transforms always return finished // as true, even when it doesn't finish... previousLabel.hidden = YES; } }; if (animated) { // Animate the transition between both labels [UIView animateWithDuration:_transitionDuration animations:changeBlock completion:completionBlock]; } else { changeBlock(); completionBlock(YES); }}#pragma mark Private helpers- (void)setupWithEffect:(BBCyclingLabelTransitionEffect)effect andDuration:(NSTimeInterval)duration{ NSUInteger size = 2; NSMutableArray* labels = [NSMutableArray arrayWithCapacity:size]; for (NSUInteger i = 0; i < size; i++) { UILabel* label = [[UILabel alloc] initWithFrame:self.bounds]; [self addSubview:label]; label.backgroundColor = [UIColor clearColor]; label.hidden = YES; label.numberOfLines = 0; [labels addObject:label]; } _currentLabelIndex = 0; self.currentLabel = [labels objectAtIndex:0]; self.labels = labels; _currentLabel.hidden = NO; self.transitionEffect = effect; self.transitionDuration = duration;}- (void)prepareTransitionBlocks{ //if matches custom if (_transitionEffect == BBCyclingLabelTransitionEffectCustom) { return; } BBCyclingLabelTransitionEffect type = _transitionEffect; self.preTransitionBlock = ^(UILabel* labelToEnter) { if (type & BBCyclingLabelTransitionEffectFadeIn) { labelToEnter.alpha = 0; } if (type & BBCyclingLabelTransitionEffectZoomIn) { labelToEnter.transform = CGAffineTransformMakeScale(0.5, 0.5); } if (type & (BBCyclingLabelTransitionEffectScrollUp | BBCyclingLabelTransitionEffectScrollDown)) { CGRect frame = labelToEnter.frame; if (type & BBCyclingLabelTransitionEffectScrollUp) { frame.origin.y = self.bounds.size.height; } if (type & BBCyclingLabelTransitionEffectScrollDown) { frame.origin.y = 0 - frame.size.height; } labelToEnter.frame = frame; } }; self.transitionBlock = ^(UILabel* labelToExit, UILabel* labelToEnter) { if (type & BBCyclingLabelTransitionEffectFadeIn) { labelToEnter.alpha = 1; } if (type & BBCyclingLabelTransitionEffectFadeOut) { labelToExit.alpha = 0; } if (type & BBCyclingLabelTransitionEffectZoomOut) { labelToExit.transform = CGAffineTransformMakeScale(1.5, 1.5); } if (type & BBCyclingLabelTransitionEffectZoomIn) { labelToEnter.transform = CGAffineTransformIdentity; } if (type & (BBCyclingLabelTransitionEffectScrollUp | BBCyclingLabelTransitionEffectScrollDown)) { CGRect frame = labelToExit.frame; CGRect enterFrame = labelToEnter.frame; if (type & BBCyclingLabelTransitionEffectScrollUp) { frame.origin.y = 0 - frame.size.height; enterFrame.origin.y = roundf((self.bounds.size.height / 2) - (enterFrame.size.height / 2)); } if (type & BBCyclingLabelTransitionEffectScrollDown) { frame.origin.y = self.bounds.size.height; enterFrame.origin.y = roundf((self.bounds.size.height / 2) - (enterFrame.size.height / 2)); } labelToExit.frame = frame; labelToEnter.frame = enterFrame; } };}- (NSUInteger)nextLabelIndex{ return (_currentLabelIndex + 1) % [_labels count];}- (void)resetLabel:(UILabel*)label{ label.alpha = 1; label.transform = CGAffineTransformIdentity; label.frame = self.bounds;}@end
0 2
- iOS走马灯上下滚动显示文本
- 类似淘宝头条,走马灯上下滚动
- javascript上下滚动文本
- IOS控件系列---文本上下滚动的标签实现广告
- android学习之文本显示走马灯
- JS实现文本内容上下滚动效果
- 实现TextView文本的上下滚动
- android - TextView单行显示...或者文字左右滚动(走马灯效果)
- TextView单行显示,文字左右滚动(走马灯效果)实现条件:
- js 滚动显示文本
- 走马灯滚动效果
- android 文本走马灯代码
- ios scrollview不能上下滚动的问题
- iOS文字上下滚动效果的实现
- Win32 滚动条显示文本
- Android 文本内容滚动显示
- win32 滚动条 显示文本
- js实现滚动文本显示
- 物理学的理解
- 个人项目上传GitHub
- 【深度学习】简单地利用keras做车标识别
- linux驱动中的,时间, 延时
- EndNote安装教程与使用教程 关联加载word
- iOS走马灯上下滚动显示文本
- Java生成读取条形码和二维码图片(未测试)
- js:获取css参数值
- 非IE内核浏览器支持activex插件
- js上传图片预览 (未测试)
- 1075. PAT Judge (25)
- java加解密工具类,支持RSA,AES(未测试)
- JAVA实践Bellman-Ford最短路径距离算法
- apache commons fileupload 安全漏洞(2016-07-01更新)