弹幕是现在比较流行的一个功能,哪哪都有,所以做了个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]; }]; } }
原文:http://my.oschina.net/iq19900204/blog/392868