ios – 如何准确地在图像模式上绘制线条

ios – 如何准确地在图像模式上绘制线条,第1张

概述我有一个UI ImageView.在里面,我正在画一条机智用户触摸事件.问题是可以在UIImageview中的任何地方绘制一条线,但我喜欢仅使用图像模式绘制线条. 例如,看看这张图片.我只需要在图像模式上画线. 这是我的代码: -(void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ UITo 我有一个UI ImageVIEw.在里面,我正在画一条机智用户触摸事件.问题是可以在UIImagevIEw中的任何地方绘制一条线,但我喜欢仅使用图像模式绘制线条.

例如,看看这张图片.我只需要在图像模式上画线.

这是我的代码:

-(voID)touchesMoved:(NSSet<UItouch *> *)touches withEvent:(UIEvent *)event{    UItouch *touch = [[event alltouches] anyObject];    touchPoint = [touch locationInVIEw:self.imgcolor];    UIBezIErPath *path = [UIBezIErPath bezIErPath];    [path movetoPoint:CGPointMake(touchPoint.x,touchPoint.y)];    [path addlinetoPoint:CGPointMake(startingPoint.x,startingPoint.y)];    startingPoint=touchPoint;    CAShapeLayer *shapeLayer = [CAShapeLayer layer];    shapeLayer.path = [path CGPath];    shapeLayer.strokecolor = [[UIcolor bluecolor] CGcolor];    shapeLayer.linewidth = 3.0;    shapeLayer.fillcolor = [[UIcolor redcolor] CGcolor];    [self.imgcolor.layer addSublayer:shapeLayer];    [arrLayer addobject:shapeLayer];    NSLog(@"touch moving point =x : %f touch moving point =y : %f",touchPoint.x,touchPoint.y);}

我希望有人解决我的问题.

解决方法 你可以试试这种方式.

假设你有一个名为maskPath的bezIErPath,在我的例子中是textPath,它用于掩盖imageVIEw.

我正在使用一个简单的maskVIEw,它在imageVIEw上绘制字母Q.

添加maskPath :(向imageVIEw添加一个简单的Q形掩码)

-(voID)applyMask{//// Text DrawingtextPath = [UIBezIErPath bezIErPath];[textPath movetoPoint: CGPointMake(181,179.8)];[textPath addlinetoPoint: CGPointMake(166,197.2)];[textPath addlinetoPoint: CGPointMake(189.7,216.1)];[textPath addCurvetoPoint: CGPointMake(160,222.1) controlPoint1: CGPointMake(180.1,220.1) controlPoint2: CGPointMake(170.2,222.1)];[textPath addCurvetoPoint: CGPointMake(126.4,214.45) controlPoint1: CGPointMake(147,222.1) controlPoint2: CGPointMake(135.8,219.55)];[textPath addCurvetoPoint: CGPointMake(103.3,194.2) controlPoint1: CGPointMake(117,209.35) controlPoint2: CGPointMake(109.3,202.6)];[textPath addCurvetoPoint: CGPointMake(90.1,165.85) controlPoint1: CGPointMake(97.3,185.8) controlPoint2: CGPointMake(92.9,176.35)];[textPath addCurvetoPoint: CGPointMake(85.9,133.9) controlPoint1: CGPointMake(87.3,155.35) controlPoint2: CGPointMake(85.9,144.7)];[textPath addCurvetoPoint: CGPointMake(90.1,101.95) controlPoint1: CGPointMake(85.9,123.1) controlPoint2: CGPointMake(87.3,112.45)];[textPath addCurvetoPoint: CGPointMake(103.3,73.6) controlPoint1: CGPointMake(92.9,91.45) controlPoint2: CGPointMake(97.3,82)];[textPath addCurvetoPoint: CGPointMake(126.4,53.35) controlPoint1: CGPointMake(109.3,65.2) controlPoint2: CGPointMake(117,58.45)];[textPath addCurvetoPoint: CGPointMake(160,45.7) controlPoint1: CGPointMake(135.8,48.25) controlPoint2: CGPointMake(147,45.7)];[textPath addCurvetoPoint: CGPointMake(193.6,53.35) controlPoint1: CGPointMake(173,45.7) controlPoint2: CGPointMake(184.2,48.25)];[textPath addCurvetoPoint: CGPointMake(216.7,73.6) controlPoint1: CGPointMake(203,58.45) controlPoint2: CGPointMake(210.7,65.2)];[textPath addCurvetoPoint: CGPointMake(229.9,101.95) controlPoint1: CGPointMake(222.7,82) controlPoint2: CGPointMake(227.1,91.45)];[textPath addCurvetoPoint: CGPointMake(234.1,133.9) controlPoint1: CGPointMake(232.7,112.45) controlPoint2: CGPointMake(234.1,123.1)];[textPath addCurvetoPoint: CGPointMake(228.1,171.85) controlPoint1: CGPointMake(234.1,147.1) controlPoint2: CGPointMake(232.1,159.75)];[textPath addCurvetoPoint: CGPointMake(209.5,202.6) controlPoint1: CGPointMake(224.1,183.95) controlPoint2: CGPointMake(217.9,194.2)];[textPath addlinetoPoint: CGPointMake(181,179.8)];[textPath closePath];[textPath movetoPoint: CGPointMake(244,259.3)];[textPath addlinetoPoint: CGPointMake(258.4,241.3)];[textPath addlinetoPoint: CGPointMake(230.2,219.1)];[textPath addCurvetoPoint: CGPointMake(254.5,180.7) controlPoint1: CGPointMake(241,208.3) controlPoint2: CGPointMake(249.1,195.5)];[textPath addCurvetoPoint: CGPointMake(262.6,133.9) controlPoint1: CGPointMake(259.9,165.9) controlPoint2: CGPointMake(262.6,150.3)];[textPath addCurvetoPoint: CGPointMake(256.15,91.75) controlPoint1: CGPointMake(262.6,119.3) controlPoint2: CGPointMake(260.45,105.25)];[textPath addCurvetoPoint: CGPointMake(236.8,55.9) controlPoint1: CGPointMake(251.85,78.25) controlPoint2: CGPointMake(245.4,66.3)];[textPath addCurvetoPoint: CGPointMake(204.7,31) controlPoint1: CGPointMake(228.2,45.5) controlPoint2: CGPointMake(217.5,37.2)];[textPath addCurvetoPoint: CGPointMake(160,21.7) controlPoint1: CGPointMake(191.9,24.8) controlPoint2: CGPointMake(177,21.7)];[textPath addCurvetoPoint: CGPointMake(115.3,31) controlPoint1: CGPointMake(143,21.7) controlPoint2: CGPointMake(128.1,24.8)];[textPath addCurvetoPoint: CGPointMake(83.2,55.9) controlPoint1: CGPointMake(102.5,37.2) controlPoint2: CGPointMake(91.8,45.5)];[textPath addCurvetoPoint: CGPointMake(63.85,91.75) controlPoint1: CGPointMake(74.6,66.3) controlPoint2: CGPointMake(68.15,78.25)];[textPath addCurvetoPoint: CGPointMake(57.4,133.9) controlPoint1: CGPointMake(59.55,105.25) controlPoint2: CGPointMake(57.4,119.3)];[textPath addCurvetoPoint: CGPointMake(63.85,176.05) controlPoint1: CGPointMake(57.4,148.5) controlPoint2: CGPointMake(59.55,162.55)];[textPath addCurvetoPoint: CGPointMake(83.2,211.9) controlPoint1: CGPointMake(68.15,189.55) controlPoint2: CGPointMake(74.6,201.5)];[textPath addCurvetoPoint: CGPointMake(115.3,236.65) controlPoint1: CGPointMake(91.8,222.3) controlPoint2: CGPointMake(102.5,230.55)];[textPath addCurvetoPoint: CGPointMake(160,245.8) controlPoint1: CGPointMake(128.1,242.75) controlPoint2: CGPointMake(143,245.8)];[textPath addCurvetoPoint: CGPointMake(211.3,233.2) controlPoint1: CGPointMake(179.8,245.8) controlPoint2: CGPointMake(196.9,241.6)];[textPath addlinetoPoint: CGPointMake(244,259.3)];[textPath closePath];[UIcolor.blackcolor setFill];[textPath fill];maskLayer = [CAShapeLayer layer];maskLayer.path = [textPath CGPath];maskLayer.strokecolor = [[UIcolor blackcolor] CGcolor];maskLayer.linewidth = 3.0;maskLayer.fillcolor = [[UIcolor redcolor] CGcolor];[self.imgVIEw.layer addSublayer:maskLayer];}

你已经有了这个方法:

-(voID)touchesMoved:(NSSet<UItouch *> *)touches withEvent:(UIEvent *)event{        UItouch *touch = [[event alltouches] anyObject];        CGPoint touchPoint = [touch locationInVIEw:self.imgVIEw];        if ([textPath containsPoint:touchPoint]) {            path=nil; //this is not need,unless u want to start a new path everytime this condition executes.            path = [UIBezIErPath bezIErPath];            [path movetoPoint:CGPointMake(touchPoint.x,touchPoint.y)];            [path addlinetoPoint: CGPointMake(_startingPoint.x,_startingPoint.y)];            _startingPoint=touchPoint;        drawLayer = [CAShapeLayer layer];        drawLayer.path = [path CGPath];        drawLayer.strokecolor = [[UIcolor blackcolor] CGcolor];        drawLayer.linewidth = 3.0;        drawLayer.fillcolor = [[UIcolor redcolor] CGcolor];        [self.imgVIEw.layer addSublayer:drawLayer];        NSLog(@"touch moving point =x : %f touch moving point =y : %f",touchPoint.y);        }}

您现在可以验证,如果触摸点位于textPath中,则它是bezIErPath.
如果touchPoint在textPath中,则允许绘制,否则不绘制.

结果将是这样的:

如您所见,此代码将允许您仅在屏蔽路径中绘制.
如果你想在textPath之外绘制,那么你可以简单地做:

if (![textPath containsPoint:touchPoint]) { path=nil; //this is not need,unless u want to start a new path everytime this condition executes. path = [UIBezIErPath bezIErPath];[path movetoPoint:CGPointMake(touchPoint.x,touchPoint.y)];[path addlinetoPoint:CGPointMake(_startingPoint.x,_startingPoint.y)];_startingPoint=touchPoint;    drawLayer = [CAShapeLayer layer];    drawLayer.path = [path CGPath];    drawLayer.strokecolor = [[UIcolor blackcolor] CGcolor];    drawLayer.linewidth = 3.0;    drawLayer.fillcolor = [[UIcolor redcolor] CGcolor];    [self.imgVIEw.layer addSublayer:drawLayer];    NSLog(@"touch moving point =x : %f touch moving point =y : %f",touchPoint.y);}

注意:您需要在绘制线条时注意触摸移动的方法.作为贝塞尔路径方法,addlinetoPoint将向touchPoint添加线,此线可能会穿过maskedpath.您需要确保关闭previosu bezIEr路径并开始一个新路径以避免在蒙版区域的外部绘制线条.

总结

以上是内存溢出为你收集整理的ios – 如何准确地在图像模式上绘制线条全部内容,希望文章能够帮你解决ios – 如何准确地在图像模式上绘制线条所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1104949.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存