用于手指触摸绘图的 UIBezierPath 平滑曲线
Posted
技术标签:
【中文标题】用于手指触摸绘图的 UIBezierPath 平滑曲线【英文标题】:UIBezierPath Smooth Curve for finger touch drawing 【发布时间】:2012-07-12 10:14:40 【问题描述】:我想平滑手指触摸画线上的曲线,我希望 UIBezierPath 中的解决方案只有我的代码不能完全平滑线。我的代码在这里
@implementation MyLineDrawingView
@synthesize undoSteps;
- (id)initWithFrame:(CGRect)frame
self = [super initWithFrame:frame];
if (self)
// Initialization code
[super setBackgroundColor:[UIColor whiteColor]];
pathArray=[[NSMutableArray alloc]init];
bufferArray=[[NSMutableArray alloc]init];
return self;
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
[[UIColor blackColor] setStroke];
for (UIBezierPath *_path in pathArray)
[_path strokeWithBlendMode:kCGBlendModeNormal alpha:1.0];
#pragma mark - Touch Methods
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
[bufferArray removeAllObjects];
myPath=[[UIBezierPath alloc]init];
myPath.lineWidth=5;
myPath.miterLimit=-10;
myPath.lineCapStyle = kCGLineCapRound;
myPath.flatness = 0.0;
UITouch *mytouch=[[touches allObjects] objectAtIndex:0];
[myPath moveToPoint:[mytouch locationInView:self]];
[pathArray addObject:myPath];
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
UITouch *mytouch=[[touches allObjects] objectAtIndex:0];
[myPath addLineToPoint:[mytouch locationInView:self]];
[self setNeedsDisplay];
-(void)undoButtonClicked
if([pathArray count]>0)
UIBezierPath *_path=[pathArray lastObject];
[bufferArray addObject:_path];
[pathArray removeLastObject];
[self setNeedsDisplay];
-(void)redoButtonClicked
if([bufferArray count]>0)
UIBezierPath *_path=[bufferArray lastObject];
[pathArray addObject:_path];
[bufferArray removeLastObject];
[self setNeedsDisplay];
- (void)dealloc
[pathArray release];
[bufferArray release];
[super dealloc];
@end
我正在使用我的代码获取输出,如下图所示:
我想要平滑的曲线输出,如下图所示:
谁能帮帮我,不胜感激!
提前致谢!
【问题讨论】:
【参考方案1】:问题在于您只是使用addLineToPoint:
向路径添加点。这相当于创建一系列直线。您确实需要添加控制点,例如在 Illustrator 或 Sketch 中绘制曲线路径时可能拖动的手柄。
您可以使用addCurveToPoint:controlPoint1:controlPoint2:
添加这些;诀窍是确定控制点的放置位置,相对于您从touches*
事件中实际返回的点。
为了更好地讨论可能的技术,我推荐以下问题:Drawing Smooth Curves - Methods Needed。
【讨论】:
以上是关于用于手指触摸绘图的 UIBezierPath 平滑曲线的主要内容,如果未能解决你的问题,请参考以下文章