本文分为两部分来介绍 ZegoWhiteboardView SDK:
2.3.0 或以上
版本的 SDK 支持 Token 鉴权,若您需要升级鉴权方式,可参考 如何从 AppSign 鉴权升级为 Token 鉴权。
开发者在工程中引入头文件。
// 引入 ZegoExpress-Video SDK 头文件
#import <ZegoExpressEngine/ZegoExpressEngine.h>
// 引入 ZegoWhiteboardView SDK 头文件
#import <ZegoWhiteboardView/ZegoWhiteboardView.h>
初始化 ZegoExpress-Video SDK,详情可参考实时音视频的 快速开始 - 实现流程。
/**
* appID:ZEGO 为开发者签发的应用 ID,请从 ZEGO 控制台 https://console-express.
* zego.im 申请,取值范围为 0~4294967295。
* appSign: ZEGO 为开发者签发的应用 appSign,请从 ZEGO 控制台 https://console-express. zego.im 申请
* scenario: 所属的应用场景,ZegoScenarioDefault为通用场景,请根据实际情况选择合适的场景
*/
ZegoEngineProfile *profile = [[ZegoEngineProfile alloc] init];
profile.appID = <#appID#>;
profile.appSign = <#appSign#>;
profile.scenario = ZegoScenarioDefault;
// 创建引擎,并注册 self 为 eventHandler 回调。不需要注册回调的话,eventHandler 参数可以传 nil,后续可调用 "-setEventHandler:" 方法设置回调
[ZegoExpressEngine createEngineWithProfile:profile eventHandler:self];
如果您需要切换鉴权方式,请参考 如何从 AppSign 鉴权升级为 Token 鉴权。
如果回调 completeBlock 中的 “errorCode” 为 0,代表初始化成功,可进行更多操作。errorCode 可参考 常见错误码。
[[ZegoWhiteboardManager sharedInstance] initWithCompleteBlock:^(ZegoWhiteboardViewError errorCode) {
// errorCode = 0 代表初始化成功
}];
设置 ZegoWhiteboardManager 的代理,监听常用回调事件:
[[ZegoWhiteboardManager sharedInstance] setDelegate:self]
。
建议关注以下事件:
// 当房间内其他用户创建新的ZegoWhiteboardView的时,会收到新增ZegoWhiteboardView的回调
// 用户可以将新增的 whiteboardView 添加到视图中
- (void)onWhiteboardAdd:(ZegoWhiteboardView *)whiteboardView;
// 当房间内其他用户删除 ZegoWhiteboardView 时,会收到 ZegoWhiteboardView 移除的回调
// 用户可以根据 whiteboardID 移除相应的 ZegoWhiteboardView
- (void)onWhiteboardRemoved:(ZegoWhiteboardID)whiteboardID;
调用 ZegoExpressEngine 的 loginRoom 接口,传入房间 ID 参数 “roomID” 和用户参数 “user”,登录房间。
错误码详情请参考 登录房间错误码 。
- (void)loginRoom {
// roomID 由您本地生成,需保证 “roomID” 全局唯一。不同用户要登录同一个房间才能进行通话
NSString *roomID = @"room1";
// 创建用户对象,ZegoUser 的构造方法 userWithUserID 会将 “userName” 设为与传的参数 “userID” 一样。“userID” 与 “userName” 不能为 “nil”,否则会导致登录房间失败。
// userID 由您本地生成,需保证 “userID” 全局唯一。
ZegoUser *user = [ZegoUser userWithUserID:@"user1"];
// 只有传入 “isUserStatusNotify” 参数取值为 “true” 的 ZegoRoomConfig,才能收到 onRoomUserUpdate 回调。
ZegoRoomConfig *roomConfig = [[ZegoRoomConfig alloc] init];
roomConfig.isUserStatusNotify = YES;
// 登录房间
[[ZegoExpressEngine sharedEngine] loginRoom:roomID user:user config:roomConfig callback:^(int errorCode, NSDictionary * _Nullable extendedData) {
// (可选回调) 登录房间结果,如果仅关注登录结果,关注此回调即可
if (errorCode == 0) {
NSLog(@"房间登录成功");
} else {
// 登录失败,请参考 errorCode 说明 https://doc-zh.zego.im/article/4377
NSLog(@"房间登录失败");
}
}];
}
// 创建白板模型
ZegoWhiteboardViewModel *model = [[ZegoWhiteboardViewModel alloc] init];
model.aspectWidth = 16.0 * 5; // 希望创建的白板的等比宽,如果我们创建超过一页的白板,需要乘以相应页数的倍数
model.aspectHeight = 9.0; // 希望创建的白板的等比高
model.roomID = @"123456"; // 传入房间ID,便于接收端判断
model.name = @"白板";
创建成功之后,同一房间内的其他用户会收到 onWhiteboardAdd 的代理回调。
[[ZegoWhiteboardManager sharedInstance] createWhiteboardView:model completeBlock:^(ZegoWhiteboardViewError errorCode, ZegoWhiteboardView *whiteboardView) {
whiteboardView.frame = CGRectMake(0, 0, 500, 300);
[self.view addSubView: whiteboardView];
}];
将 completeBlock 回调中获取的 whiteboardView 设置 frame,并添加到视图中,即可展示 ZegoWhiteboardView。
whiteboardView.frame = CGRectMake(0, 0, 500, 300);
[self.view addSubView: whiteboardView];
[currentWhiteboardView setWhiteboardOperationMode:ZegoWhiteboardOperationModeDraw]
设置 ZegoWhiteboardManager 类的 toolType 属性可修改 ZegoWhiteboardView 的工具类型,目前支持 10 种工具。
ZegoWhiteboardViewToolNone , // 未选择
ZegoWhiteboardViewToolPen , // 涂鸦画笔
ZegoWhiteboardViewToolText , // 文本
ZegoWhiteboardViewToolLine , // 直线
ZegoWhiteboardViewToolRect , // 矩形
ZegoWhiteboardViewToolEllipse , // 圆
ZegoWhiteboardViewToolSelector ,// 选取图元
ZegoWhiteboardViewToolEraser , // 橡皮擦
ZegoWhiteboardViewToolLaser , // 激光笔
ZegoWhiteboardViewToolCustomImage // 自定义图形工具
// 设置白板工具为画笔
[ZegoWhiteboardManager sharedInstance].toolType = ZegoWhiteboardViewToolPen;
[ZegoWhiteboardManager sharedInstance].brushColor = [UIColor redColor]; // 画笔颜色,默认为红色
[ZegoWhiteboardManager sharedInstance].brushSize = 10; // 画笔粗细,默认为 16
设置涂鸦画笔成功后,用手指在 whiteboardView 的范围内按下移动,即可看到涂鸦效果展示在 whiteboardView 上。
ZEGO SDK 已内置画笔图标,开发者可通过 setCustomCursorAttribute 设置画笔的光标样式。
// 关闭自定义光标(默认为开启状态)
[ZegoWhiteboardManager sharedInstance].enableCustomCursor = NO;
// 开启自定义光标
[ZegoWhiteboardManager sharedInstance].enableCustomCursor = YES;
// 关闭显示远程自定义光标(默认为开启状态)
[ZegoWhiteboardManager sharedInstance].enableRemoteCursorVisible = NO;
// 开启显示远程自定义光标
[ZegoWhiteboardManager sharedInstance].enableRemoteCursorVisible = YES;
// 设置自定义光标
ZegoWhiteboardCursorAttribute * attribute = [ZegoWhiteboardCursorAttribute new];
attribute.iconPath = @"https://xxxxxxxx.com/xxx.png"; // 请使用正确的图片地址
attribute.offsetX = 0; // 自定义光标作用点,绘制点作用在图片指定 x 偏移方向,默认为 0,不可超出图片宽度
attribute.offsetY = 0; // 自定义光标作用点,绘制点作用在图片指定 y 偏移方向,默认为 0,不可超出图片高度
// currentWhiteboardView 为当前使用的白板
[currentWhiteboardView setCustomCursorAttribute:ZegoWhiteboardViewCursorTypePen cursorAttribute:attribute complete:nil];
不同用户只要加入同一个房间,通过 getWhiteboardListWithCompleteBlock 获取到 ZegoWhiteboardView 列表,并将 ZegoWhiteboardView 添加到界面中,即可观察到 ZegoWhiteboardView 上的图元和位置的同步情况。
只要用户一直保持登录状态,ZegoWhiteboardView SDK 会自动同步 ZegoWhiteboardView 上的内容和滚动位置,房间内的用户都会看到相同的内容,开发者无需额外做其他操作。
调用 scrollToHorizontalPercent 方法使 ZegoWhiteboardView 滚动到相应位置。
CGFloat horizontalPercent = 0.5; // 水平位置百分比
CGFloat verticalPercent = 0; // 垂直位置百分比
[self scrollToHorizontalPercent:horizontalPercent
verticalPercent:verticalPercent
completionBlock:nil];
调用 ZegoWhiteboardManager 类的 destroyWhiteboardID 接口移除白板。
移除成功之后,同一房间内的用户会收到 - (void)onWhiteboardAdd:(ZegoWhiteboardView *)whiteboardView
的代理回调。
[[ZegoWhiteboardManager sharedInstance] destroyWhiteboardID:whiteboardID completeBlock:^[(ZegoWhiteboardViewError errorCode, ZegoWhiteboardID whiteboardID) {
// 白板移除成功后,可根据 whiteboardID 移除相应的 ZegoWhiteboardView
if (errorCode == ZegoWhiteboardViewSuccess) {
[self.whiteboardView removeFromSuperview];
}
}];
请参考 3.1 引入并初始化 SDK 和 3.2 登录房间 初始化 ZegoWhiteboardView SDK 并登录房间。
调用 ZegoWhiteboardManager 的 getWhiteboardListWithCompleteBlock 接口获取房间内已创建的 ZegoWhiteboardView 列表。
用户可以将获取到的 ZegoWhiteboardView 直接添加到界面上展示,用户可通过 ZegoWhiteboardView 的 whiteboardModel 属性获取白板信息。
// 获取房间内已创建的 ZegoWhiteboardView 列表
[[ZegoWhiteboardManager sharedInstance] getWhiteboardListWithCompleteBlock:^(ZegoWhiteboardViewError errorCode, NSArray *whiteBoardList) {
// 遍历返回的 ZegoWhiteboardView 列表,用户可直接添加到界面中, 或者保存起来按需使用
for (ZegoWhiteboardView *whiteBoardView in whiteBoardList) {
whiteBoardView.frame = CGRectMake(0, 0, 500, 300);
[self.view addSubview:whiteBoardView];
[self.whiteboardViewList addObject:whiteBoardView];
}
}];
开发者可以根据需要,关注白板新增和删除时的代理回调。关注回调前,必须保证设置了 ZegoWhiteboardManager 的代理:[[ZegoWhiteboardManager sharedInstance] setDelegate:self];
// 当房间内其他用户创建新的ZegoWhiteboardView的时,会收到新增ZegoWhiteboardView的回调
// 用户可以将新增的 whiteboardView 添加到视图中
- (void)onWhiteboardAdd:(ZegoWhiteboardView *)whiteboardView {
whiteBoardView.frame = CGRectMake(0, 0, 500, 300);
[self.view addSubview:whiteBoardView];
[self.whiteboardViewList addObject:whiteBoardView];
}
// 当房间内其他用户删除 ZegoWhiteboardView 时,会收到 ZegoWhiteboardView 移除的回调
// 用户可以根据 whiteboardID 移除相应的 ZegoWhiteboardView
- (void)onWhiteboardRemoved:(ZegoWhiteboardID)whiteboardID {
for (NSInteger i = 0; i < self.whiteboardViewList.count; i++) {
ZegoWhiteboardView *whiteboardView = self.whiteboardViewList[i];
if (whiteboardView.whiteboardModel.whiteboardID == whiteboardID) {
[self.whiteboardViewList removeObjectAtIndex:i];
[whiteboardView removeFromSuperview];
i--;
}
}
}
开发者可以在互动白板示例项目中,体验互动白板业务,并查看完整的源码和代码逻辑,详情请参考 互动白板 - 下载示例源码。
联系我们
文档反馈