iOS封装 之 直播弹幕

来源:互联网 发布:python 字典删除元素 编辑:程序博客网 时间:2024/04/30 10:01

在某网站看直播的时候,突然奇想,想自己封装一下弹幕效果,以后做App的时候可以直接用

最终效果:


总结了一下我的需求

1. 界面可显示其他来源的弹幕

2. 要求自己可以发送弹幕

3. 自己发送的弹幕与他人发送的不一致(实现效果与ZQ保持一致)

4. 支持横竖屏切换

5. 承载弹幕的Label要求变长


具体实现

1. 封装一个显示弹幕的Label的生成方法,适用自己发送的信息以及构造的假数据

/** *  创建界面上显示的弹幕Label * *  @param titleString 显示的字幕 */- (void)createLabelWithTitle:(NSString *)titleString {        NSString *waitDisplayString = titleString;    if (!(titleString && titleString.length != 0)) {        u_int32_t index = arc4random_uniform((u_int32_t)titleArray.count);        waitDisplayString = titleArray[index];    }        // y 坐标    int yPoint = arc4random_uniform(CGRectGetHeight([UIScreen mainScreen].bounds)-45-25)+45;    // 当期弹幕Label的长度    float labelLength = waitDisplayString.length*17;        UILabel *waitDisplayLabel = [[UILabel alloc] initWithFrame:CGRectMake(CGRectGetWidth([UIScreen mainScreen].bounds), yPoint, labelLength, 25)];    waitDisplayLabel.text = waitDisplayString;    waitDisplayLabel.backgroundColor = [UIColor clearColor];    waitDisplayLabel.textColor = [self randomColor];    // 若弹幕为自己发送的,将Label的边框显示为白色并且宽带为1    if (titleString && titleString.length != 0) {        waitDisplayLabel.layer.borderColor = [UIColor whiteColor].CGColor;        waitDisplayLabel.layer.borderWidth = 1.0f;    }        [self.view addSubview:waitDisplayLabel];        // 给当前弹幕Label增加向左移动的动画    [self moveAnimation:waitDisplayLabel];}

2. 当前弹幕移动的动画(要求移动到边缘的时候将其销毁)

/** *  弹幕Label向左滚动动作 * *  @param waitMoveLabel 待滚动的Label的距离 */- (void)moveAnimation:(UILabel *)waitMoveLabel {    [UIView animateWithDuration:4 animations:^{        waitMoveLabel.center = CGPointMake(waitMoveLabel.center.x-CGRectGetMaxX(waitMoveLabel.frame), waitMoveLabel.center.y);    } completion:^(BOOL finished) {        if (finished) {            [waitMoveLabel removeFromSuperview];        }    }];}

3. 要求能适配横竖屏(Xib或代码)若希望当前界面支持横屏,请将下面的 UIInterfaceOrientationMaskAll 换成 UIInterfaceOrientationMaskLandscape

- (BOOL)shouldAutorotate{    return YES;}- (NSUInteger)supportedInterfaceOrientations {    return UIInterfaceOrientationMaskAll;}

4. 从左向右的滚动效果(NSTimer定时器实现,切记离开界面的时候请将定时器关闭)

- (void)viewDidLoad {    [super viewDidLoad];    titleArray = [NSArray arrayWithObjects:@"你好啊",@"骚年,不错哦",@"啊哈哈",@"O(∩_∩)O哈哈~",@"666666",@"啦啦啦,德玛西亚",@"嗯~你看见我的小熊吗?", nil];    [self.sendCommentButton addTarget:self action:@selector(sendCommentButtonClicked:) forControlEvents:UIControlEventTouchUpInside];        animationTimer = [NSTimer scheduledTimerWithTimeInterval:.3 target:self selector:@selector(addNewCommentToScreen) userInfo:nil repeats:YES];}

5. 承载弹幕的Label变成,本例是根据字符串的长度进行计算的,有关字符串长度的扩展请看

NSString 之 length 别让眼睛欺骗了你


上述介绍了一下主要技术,相关的实现Demo我已放在 http://download.csdn.net/detail/yanglei3kyou/9066969  供大家下载。封装的如有不满意之处,敬请原谅。


0 0
原创粉丝点击