UIBezierPath, UIPanGestureRecognizer 高效绘制图形

使用手势UIPanGestureRecognizer作为手指在屏幕上滑动获取坐标方式,摒弃touches:begin; touches:moved。

// 初始化设置

- (void)setUp

{

    // 添加pan手势

    _pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];

    _pan.delegate=self;

    _pan.maximumNumberOfTouches = 1;

    [self addGestureRecognizer:_pan];


    _lineWidth = 1;

    _pathColor= [UIColorblackColor];

}


UIPanGestureRecognizer方法

// 当手指拖动的时候调用

- (void)pan:(UIPanGestureRecognizer *)pan

{


    // 获取当前手指触摸点

    CGPointcurP = [panlocationInView:self];

    CGPointmidPoint =midpoint(_prePoint, curP);

    // 获取开始点

    if (pan.state == UIGestureRecognizerStateBegan) {

        // 创建贝瑟尔路径

        _path= [[WDDrawPathalloc]init];


        // 设置线宽

        _path.lineWidth = _lineWidth;


        // 给路径设置颜色

        _path.pathColor = _pathColor;


        // 设置路径的起点

        [_pathmoveToPoint:curP];

        _startPoint= curP;


        // 保存描述好的路径

        [self.pathsaddObject:_path];

    }

    if (pan.state==UIGestureRecognizerStateEnded) {

        _endPoint= curP;

    }

    if (pan.state==UIGestureRecognizerStateChanged) {

        if(self.viewType==kQuXian) {

            [_path addQuadCurveToPoint:midPoint controlPoint:_prePoint];

        }elseif(self.viewType==kZhiXian) {

            [_pathremoveAllPoints];

            [_pathmoveToPoint:_startPoint];

            [_pathaddLineToPoint:_endPoint];

        }elseif(self.viewType==kJuXing) {

            [_pathremoveAllPoints];

            [_pathmoveToPoint:_startPoint];

            CGPointleftBottomPoint =CGPointMake(_startPoint.x, curP.y);

            CGPointrightTopPoint =CGPointMake(curP.x,_startPoint.y);

            [_pathaddLineToPoint:leftBottomPoint];

            [_pathaddLineToPoint:curP];

            [_pathaddLineToPoint:rightTopPoint];

            [_pathaddLineToPoint:_startPoint];

        }

        _endPoint= curP;

    }

    // 手指一直在拖动

    // 添加线到当前触摸点

    _prePoint= curP;

    // 重绘

    [self setNeedsDisplay];


}

你可能感兴趣的:(UIBezierPath, UIPanGestureRecognizer 高效绘制图形)