IT虾米网

ios实战-弹幕的实现

developer 2018年06月24日 手机开发 1201 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]; 
        }]; 
          
    } 
}

评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!