ios實戰-彈幕的實現

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