书法绘图 IOS Coregraphics
Posted
技术标签:
【中文标题】书法绘图 IOS Coregraphics【英文标题】:Calligraphy Drawing IOS Coregraphics 【发布时间】:2013-05-27 14:00:38 【问题描述】:我希望有一些用红色标记的东西作为标记,但不知道是否可以完成。
看起来像用书法笔做标记。
尝试“Andrey”回答的以下代码,我在绘图时得到以下带有空格的输出。
刷图可以在这里找到,使用的是
对代码进行进一步更改,我发现我仍然无法获得预期的结果。 在这里,我试图填充当前点和下一点之间存在的路径。
- (void)drawRect:(CGRect)rect
// Drawing code
CGFloat w=5.0;
CGFloat h=2.0;
CGContextRef context=UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor);
for(int i=0;i<self.positions.count;i++)
CGPoint point=[[self.positions objectAtIndex:i] CGPointValue];
CGFloat x=point.x-(w/2.0);
CGFloat y=point.y-(h/2.0);
CGContextFillRect(context, CGRectMake(x, y, w, h));
if(i+1<self.positions.count)
CGPoint nextPoint=[[self.positions objectAtIndex:(i+1)] CGPointValue];
CGMutablePathRef myPath=CGPathCreateMutable();
CGPathMoveToPoint(myPath, NULL, x, y);
CGFloat x1=nextPoint.x-(w/2.0);
CGFloat y1=nextPoint.y-(h/2.0);
CGPathAddLineToPoint(myPath, NULL, x1, y1);
CGPathAddLineToPoint(myPath, NULL, w, y1);
CGPathAddLineToPoint(myPath, NULL, w, y);
CGPathCloseSubpath(myPath);
CGContextFillPath(context);
【问题讨论】:
嗨,兄弟,你找到灵魂了吗? 【参考方案1】:这些图片可以通过在 UIView
子类中绘制图像并覆盖 drawRect:
消息来完成。您还需要添加某种触摸处理程序来捕捉触摸。所以这里有一些代码:
@interface DrawingView ()
@property (nonatomic, strong) NSMutableArray *positions;
@end
@implementation DrawingView
- (id)initWithFrame:(CGRect)frame
self = [super initWithFrame:frame];
if (self)
[self awakeFromNib];
return self;
- (void)awakeFromNib
self.positions = [[NSMutableArray alloc] init];
- (void)drawRect:(CGRect)rect
[super drawRect:rect];
UIImage *brushImage = [UIImage imageNamed:@"brush.png"];
for (NSValue *object in self.positions)
CGPoint point = [object CGPointValue];
[brushImage drawAtPoint:CGPointMake(point.x - brushImage.size.width / 2.0, point.y - brushImage.size.height / 2.0)];
- (void)addPoint:(CGPoint)point
[self.positions addObject:[NSValue valueWithCGPoint:point]];
[self setNeedsDisplay];
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
UITouch *touch = [touches anyObject];
[self addPoint:[touch locationInView:self]];
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
UITouch *touch = [touches anyObject];
[self addPoint:[touch locationInView:self]];
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
UITouch *touch = [touches anyObject];
[self addPoint:[touch locationInView:self]];
@end
您只需要创建一个适当的brush.png
并将这些视图放置在您想要的任何位置。
【讨论】:
没想到画起来这么容易。嘿,顺便说一句,当我编码时,我发现很少有空格,这不应该发生,因为我们会在 touchesMoved 中不断更新它: @weber67touchesMoved
将跳过一些位置。您必须记住最后一个位置并在其间插入位置。
@weber67 您应该使用上面提到的 Sulthan 的某种插值。正确的逻辑是使用从触摸中获得的点来实现插值线图。但复杂的数字可能会很慢。
您可以使用线条代替插值。只需用图案制作颜色并在相邻点之间画线。但是在touchesBegan
和touchesEnded
中需要一些额外的逻辑才能让图形有空格。如果您需要,我可以更正我的答案:)
@AndreyChevozerov & Sulthan 谢谢。我已经编辑了我的代码,但我发现我仍然有相同的结果。请告诉我,我在哪里犯了错误。以上是关于书法绘图 IOS Coregraphics的主要内容,如果未能解决你的问题,请参考以下文章