美文网首页
iOS同步画板(你画我猜)

iOS同步画板(你画我猜)

作者: 灰斗儿 | 来源:发表于2020-03-03 17:03 被阅读0次

本质

基于系统绘画API获取绘制时的点,然后通过Socket发送出去,接收端看获取传输的点数据绘制

每绘制一笔,会触发 touchbegin->touchmove->tauchend, 也就是每一个touch周期代表一笔,每一笔由很多点组成,把每一笔加入笔数组,然后把该笔数组同步到服务器,服务器分发到客户端,客户端接收到笔数组,根据笔数组创建bezierPath,然后把该路径绘制到屏幕上。

以下是伪代码

点采集和绘制

点采集

- (void)touchesBegin:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
      self.pointArray = [[NSArray allloc] init]
      [self.biArray addObject:self.pointArray];
}
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    //获取坐标
    CGPoint point = [[touches anyObject] locationInView:self];
    //添加点到笔画中
    [[self.pointArray last] addObject:point];
    //绘制
    [self draw:self.biArray];
   
}
- (void)touchesEnd:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
      [self.biArray addObject:self.pointArray];
}
//从socket接收到的笔画数组作为参数输入
//本地绘制也一样
- (void)draw:(NSArray *)biArray {
        //循环所有笔画
        for (bi in biArray) {
              //移动到笔画的第一个点
              [bezierPath moveToPoint:bi[0]]
              //循环笔画所有点
              for (point in bi) {
                  [bezierPath addLineToPoint:point];
                 
              }
     
        }
        //绘制曲线
       ((CAShapeLayer *)self).path = bezierPath.CGPath;
}

点传输

//启动定时器
self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(displayLinkAction:)];
self.displayLink.frameInterval  = 2; //苹果手机屏幕刷新率60fps,既1秒60帧。frameInterval设置为几就是几帧调用一次。这里设置2,刷新率为30fps
[self.displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];
- (void)displayLinkAction:(CADisplayLink *)link
{
      //发送点阵数据
      [self.socket writeData:pointData];
}

绘制

绘制推荐使用CAShapeLayer
DrawRect:DrawRect属于CoreGraphic框架,占用CPU,消耗性能大
CAShapeLayer:CAShapeLayer属于CoreAnimation框架,通过GPU来渲染图形,节省性能。动画渲染直接提交给手机GPU,不消耗内存

总结

整体思路就是采集点,发送点,绘制点。发送需注意发送频率,数据包大小,网络等状态,例如这里的frameInterval 可根据网络堵塞情况动态调整。可根据具体情况进行调节,把握核心思路,自由发挥就好。

相关文章

  • iOS同步画板(你画我猜)

    本质 基于系统绘画API获取绘制时的点,然后通过Socket发送出去,接收端看获取传输的点数据绘制 每绘制一笔,会...

  • iOS 画板/涂鸦 你画我猜 demo (OC版)

    下载地址:https://github.com/linsendear/LSDrawTest 录制脚本: 播放脚本:...

  • Cocos Creator 实现画板(你画我猜)

    前言 本例是基于cocos官方推荐raphael实现的。其中画板与看板的同步处理我采用的是在画板画完一条线之后看板...

  • ios开发实现画板功能

    ios开发实现画板功能 ios开发实现画板功能

  • 你画我猜

    在同事姐姐的生日聚餐以后,我们围坐在一起玩你画我猜的游戏。。。 简直笑到满脸皱纹啊~~~~~

  • 你画我猜

    今天中午吃完饭,爸爸说陪我玩儿一会儿你画我猜,你画我猜我现在要给你解释一下,游戏人数最少2人,最多无限人,游戏规则...

  • 你画我猜

    今天中午吃完饭,爸爸说陪我玩儿一会儿你画我猜,你画我猜我现在要给你解释一下,游戏人数最少2人,最多无限人,游戏规则...

  • 你画我猜

    2017年7月14日早上我们6:05就起床了,吃完早饭姨爸带着我和连星皓还有姐姐还有我妹相怡希去篮球场打篮...

  • 你画我猜

    托马斯 艾米莉 高登 托比 和 伯特 他们最近喜欢上你画我猜这个游戏 伯特是其中唯一一位男生 所以 当托比抽到卫生...

  • 我画你猜🙈

    感谢阅读❤️

网友评论

      本文标题:iOS同步画板(你画我猜)

      本文链接:https://www.haomeiwen.com/subject/pxvhlhtx.html