在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:XGBarrage-implementation开源软件地址:https://gitee.com/xiao66guo/XGBarrage-implementation开源软件介绍:#XGBarrage-implementation 用完全绘制的方式实现弹幕及自定义表情和系统键盘间切换 项目功能介绍: 1️⃣用完全绘制的方式来实现弹幕的内容; 2️⃣实现自定义表情键盘和系统键盘之间的切换功能; 3️⃣实现通过放大器来查看选中表情的功能; 4️⃣用Switch开关来实现弹幕的显示与隐藏功能; 5️⃣通过是否输入弹幕的内容来监听“发送”按钮是否可用; 6️⃣对自定义表情键盘进行单独的抽取和封装,可以单独使用; 7️⃣对绘制弹幕的方法进行单独的抽取和疯转,可以单独使用; 8️⃣实现对计算文字的真实尺寸的方法进行封装; 9️⃣可实现全屏(或满屏)弹幕的功能; 绘制弹幕内容的部分代码: +(XGImage *)xg_imageWithBarrage:(XGBarrageModel *)barrage{ CGFloat marginX = 5; CGFloat expressionW = XGBarrageExpressionW; CGFloat expressionH = expressionW; CGFloat iconW = XGBarrageH; CGFloat iconH = iconW; CGSize userNameSize = [barrage.userName sizeWithFont:XGBarrageUserNameFont maxSize:CGSizeMake(MAXFLOAT, MAXFLOAT)]; CGSize contentSize = [barrage.content sizeWithFont:XGBarrageContentFont maxSize:CGSizeMake(MAXFLOAT, MAXFLOAT)]; CGFloat contentTextW = iconH + marginX * 4 + userNameSize.width + contentSize.width + barrage.expression.count * expressionH; CGFloat contentTextH = XGBarrageH; CGSize contentTextSize = CGSizeMake(contentTextW, contentTextH); UIGraphicsBeginImageContextWithOptions(contentTextSize, NO, 0.0); CGContextRef ctx = UIGraphicsGetCurrentContext(); CGContextSaveGState(ctx); CGContextAddEllipseInRect(ctx, CGRectMake(0, 0, iconW, iconH)); UIImage *icon = [UIImage imageNamed:barrage.icon]; CGContextClip(ctx); [icon drawInRect:CGRectMake(0, 0, iconW, iconH)]; CGContextRestoreGState(ctx); CGFloat bgX = iconW + marginX; CGFloat bgW = contentTextW - bgX; CGRect bgF = CGRectMake(bgX, 0, bgW, contentTextH); barrage.type ? [[UIColor clearColor] set] : [[UIColor clearColor] set]; [[UIBezierPath bezierPathWithRoundedRect:bgF cornerRadius:XGBarrageH * 0.5] fill]; CGFloat userNameX = bgX + marginX; CGFloat userNameY = (contentTextH - userNameSize.height) * 0.5; [barrage.userName drawAtPoint:CGPointMake(userNameX, userNameY) withAttributes:@{NSFontAttributeName:XGBarrageUserNameFont,NSForegroundColorAttributeName:barrage.type ? [UIColor magentaColor] : [UIColor redColor]}]; CGFloat contentX = userNameX + userNameSize.width + marginX; [barrage.content drawAtPoint:CGPointMake(contentX, userNameY) withAttributes:@{NSFontAttributeName:XGBarrageContentFont,NSForegroundColorAttributeName:barrage.type ? [UIColor whiteColor] : [UIColor whiteColor]}]; __block CGFloat expressionX = contentX + contentSize.width; CGFloat expressionY = (contentTextH - expressionH) * 0.5; [barrage.expression enumerateObjectsUsingBlock:^(NSString *expressionName, NSUInteger idx, BOOL * _Nonnull stop) { UIImage *expression = [UIImage imageNamed:expressionName]; [expression drawInRect:CGRectMake(expressionX, expressionY, expressionW, expressionH)]; expressionX += expressionW; }]; // 从当前位图上下文获得图片 UIImage *userIcon = UIGraphicsGetImageFromCurrentImageContext(); // 结束上下文 UIGraphicsEndImageContext(); ctx = nil; |
请发表评论