ios实战-弹幕的实现

弹幕是现在比较流行的一个功能,哪哪都有,所以做了个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];
        }];
        
    }
}


转载于:https://my.oschina.net/iq19900204/blog/392868

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值