IOS 文本滚动标签效果(Objc/Swift)

实现效果

QQ20200521-200338-HD.gif

  • 实现原理:动画改变文本的y坐标,同时使用把移出父布局的视图立即移到父视图的下方,使用一个临时UIView来交替上下两个视图,达到利用的效果
  • 实现核心代码如下:
    Object-c版本:
#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

typedef void(^OnClickListener)(NSString* title);

@interface ScrollLabel : UILabel
@property(nonatomic,strong) UIView* parentView;
@property(nonatomic,strong) UIButton* upLabel;
@property(nonatomic,strong) UIButton* bottomLabel;
@property(nonatomic,copy) OnClickListener listener;

-(void) setTargetView:(UIView*) parentView withTitleArray:(NSMutableArray*)array;

-(void) setOnClickListener:(OnClickListener)listener;

-(void) start;

-(void) stop;

@end

NS_ASSUME_NONNULL_END

.m文件:

#import "ScrollLabel.h"
#import "UIView+Resize.h"

@interface  ScrollLabel()
@property(nonatomic,strong)NSMutableArray* titleArray;
@property(nonatomic,strong)NSTimer *timer;
@property(nonatomic,assign)NSInteger index;

@end

@implementation ScrollLabel

-(instancetype) init{
   if (self = [super init]) {
       
   }
   return self;
}

-(void) setTargetView:(UIView*) parentView withTitleArray:(NSMutableArray*)array{
   if (!parentView || !array || array.count == 0) {
       return;
   }
   self.titleArray = array;
   self.parentView = parentView;
   self.index = 0;
   
   self.upLabel = [[UIButton alloc] init];
   self.upLabel.backgroundColor = [UIColor greenColor];
   self.upLabel.tag = 21;
   [self.upLabel addTarget:self action:@selector(onClick:) forControlEvents:UIControlEventTouchUpInside];
   [self.upLabel setTitle:[array objectAtIndex:self.index] forState:UIControlStateNormal];
   self.upLabel.frame = CGRectMake(0, 0, parentView.frame.size.width,parentView.frame.size.height);
   self.index ++;
   
   self.bottomLabel = [[UIButton alloc] init];
   self.bottomLabel.tag = 22;
   [self.bottomLabel addTarget:self action:@selector(onClick:) forControlEvents:UIControlEventTouchUpInside];

   self.bottomLabel.frame = CGRectMake(0, self.upLabel.frame.size.height, parentView.frame.size.width,parentView.frame.size.height);
   [self.bottomLabel setTitle:[array objectAtIndex:self.index] forState:UIControlStateNormal];
   self.bottomLabel.backgroundColor = [UIColor brownColor];
   
   [self.parentView addSubview:self.upLabel];
   [self.parentView addSubview:self.bottomLabel];
   
}

-(void) onClick:(UIButton*) button{
   switch (button.tag) {
       case 21:
       case 22:
           if (self.listener) {
               self.listener(button.titleLabel.text);
           }
           break;
           
       default:
           break;
   }
}
-(void) setOnClickListener:(OnClickListener)list
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值