banner
李大仁博客

李大仁博客

天地虽大,但有一念向善,心存良知,虽凡夫俗子,皆可为圣贤。

iOS开发之跑马灯滚动条的两种方法与实现

跑马灯效果的滚动条,一般出现在 iOS 应用的底部。用于显示动态变化的信息或内容较长的信息,在各类应用中使用广泛。以下两种可用的跑马灯滚动 MarqueeBar 的实现。

1. 直接在 ViewController 中实现对 UIView 的位置定时移动来实现,以下代码直接加入到 ViewController 中,在 viewWillAppear 中调用 loadView 即可。

- (void)marqueeView
{
    
    CGRect frame = self.vMarqueeContainer.frame;
    frame.origin.x = frame.origin.x -2;
    if(frame.origin.x < -frame.size.width )
    {
        frame.origin.x  = 320;
    }
    self.vMarqueeContainer.frame = frame;
    
    //延时递归调用
    [self performSelector:@selector(marqueeView) withObject:nil afterDelay:0.04];
}

- (void)loadView
{
	//marqueenbar背景,位置高度等控制
    UIView *viewMarqueeBar = [[[UIView alloc]initWithFrame:CGRectMake(0, 347, 320, 20)]autorelease];
    [viewMarqueeBar setBackgroundColor:[UIColor darkGrayColor]];
    
    //滚动容器,显示滚动范围
    UIView *viewMarqueeContainer = [[[UIView alloc]initWithFrame:CGRectMake(320, 3, 360, 14)]autorelease];
    [viewMarqueeContainer setBackgroundColor:[UIColor clearColor]];
    [viewMarqueeContainer setClipsToBounds:YES];
    [viewMarqueeContainer setOpaque:YES];
    
    //内容
    UILabel *lblContent = [[[UILabel alloc]initWithFrame:CGRectMake(0, 0, 50,14)]autorelease];
    [lblContent setText:@"这里是滚动条。。。。。"];
    [lblContent setTextColor:[UIColor whiteColor]];
    [lblContent setBackgroundColor:[UIColor clearColor]];
    [lblContent setFont:[UIFont fontWithName:@"Helvetica" size:12]];
    [lblContent setOpaque:YES];
    
    self.view= viewMarqueeBar;
    self.vMarqueeContainer = viewMarqueeContainer;
    
    [self.view addSubview:viewMarqueeContainer];

    [self marqueeView];
}

2. 自行定义滚动条控件,让 view 自己滚动起来,通过不断的相互方法调用实现循环滚动 UIMarqueeBarView.h 定义

/**
 *UIMarqueeBarView.h
 */
@interface UIMarqueeBarView : UIView
{
}

- (void)start;
- (void)stop;
@end

UIMarqueeBarView.m 实现

/**
 *UIMarqueeBarView.m
 */
 
#import "UIMarqueeBarView.h"

@implementation UIMarqueeBarView

- (void)dealloc
{
    [super dealloc];
}

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
		[self setupView];
    }
    return self;
}

-(id)initWithCoder:(NSCoder *)aDecoder {
	if( (self = [super initWithCoder:aDecoder]) ) {
		// Initialization code
		[self setupView];
	}
	return self;
}

- (void)setupView
{
    [self setBackgroundColor:[UIColor lightGrayColor]];
    [self setClipsToBounds:YES];
    [self setOpaque:YES];
    
    UILabel *lblContent = [[[UILabel alloc]initWithFrame:CGRectMake(0, 0, 150 ,16)]autorelease];
    [lblContent setText:@"这里是滚动条。。。。。"];
    [lblContent setTextColor:[UIColor whiteColor]];
    [lblContent setBackgroundColor:[UIColor clearColor]];
    [lblContent setFont:[UIFont fontWithName:@"Helvetica" size:14]];
    [lblContent setNumberOfLines:1];
    [lblContent setOpaque:YES];
    
    [self addSubview:lblContent];
}

- (void)start
{
    if (self.viewContainer == NULL) {
        [self setupView];
    }

    [self startAnimation];
}
- (void)stop
{
    
}

-(void)startAnimation
{
    [UIView beginAnimations:@"MarqueeBarAniamation" context:nil];
    [UIView setAnimationCurve:UIViewAnimationCurveLinear];
    [UIView setAnimationDuration:25];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];

    CGRect viewFrame = self.viewContainer.frame;
    viewFrame.origin.x = -320;
    [self.viewContainer setFrame:viewFrame];

    [UIView commitAnimations];
}

-(void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context
{	
    CGRect viewFrame = self.viewContainer.frame;
    viewFrame.origin.x = 320;
    [self.viewContainer setFrame:viewFrame];
	[self startAnimation];
}
加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。