首页 > 移动平台 > 详细

ios实战-弹幕的实现

时间:2015-03-27 20:18:36      阅读:263      评论:0      收藏:0      [点我收藏+]

弹幕是现在比较流行的一个功能,哪哪都有,所以做了个ios - demo分享一下:

https://github.com/Jonear/KSBarrageView

1.用NSTimer做一个定时器

2.随机一个弹道,判断该弹道是否有别的字在跑着

3.如果没有的话,将KSBarrageItemView加入到弹道里

4.然后随机个速度进行动画移动

- (void)postView {
    if (_dataArray && _dataArray.count > 0) {
        int indexPath = random()%(int)((self.frame.size.height)/30);
        int top = indexPath * 30;
        
        UIView *view = [self viewWithTag:indexPath + ITEMTAG];
        if (view && [view isKindOfClass:[KSBarrageItemView class]]) {
            return;
        }
        
        NSDictionary *dict = nil;
        if (_dataArray.count > _curIndex) {
            dict = _dataArray[_curIndex];
            _curIndex++;
        } else {
            _curIndex = 0;
            dict = _dataArray[_curIndex];
            _curIndex++;
        }
        
        for (KSBarrageItemView *view in self.subviews) {
            if ([view isKindOfClass:[KSBarrageItemView class]] && view.itemIndex == _curIndex-1) {
                return;
            }
        }
        
        KSBarrageItemView *item = [[KSBarrageItemView alloc] initWithFrame:CGRectMake([[UIScreen mainScreen] bounds].size.width, top, 10, 30)];
        
        id avatar = [dict objectForKey:@"avatar"];
        NSString *content = [dict objectForKey:@"content"];
        if ([avatar isKindOfClass:[UIImage class]]) {
            [item setAvatarWithImage:avatar withContent:content];
        } else if ([avatar isKindOfClass:[NSString class]]){
            UIImage *image = [UIImage imageNamed:avatar];
            if (image) {
                [item setAvatarWithImage:image withContent:content];
            } else {
                // 这里使用网络图片,请加入sdwebImage库
//                [item setAvatarUrl:avatar withContent:content];
            }
        } else {
            return;
        }
        
        item.itemIndex = _curIndex-1;
        item.tag = indexPath + ITEMTAG;
        [self addSubview:item];
        
        CGFloat speed = 85.;
        speed += random()%20;
        CGFloat time = (item.width+[[UIScreen mainScreen] bounds].size.width) / speed;
        
        [UIView animateWithDuration:time delay:0.f options:UIViewAnimationOptionAllowUserInteraction | UIViewAnimationOptionCurveEaseInOut  animations:^{
            item.left = -item.width;
        } completion:^(BOOL finished) {
            [item removeFromSuperview];
        }];
        
    }
}


ios实战-弹幕的实现

原文:http://my.oschina.net/iq19900204/blog/392868

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!