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];
}];
}
}</pre>
本文由用戶 wdfd 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!