书法绘图 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 中不断更新它: @weber67 touchesMoved 将跳过一些位置。您必须记住最后一个位置并在其间插入位置。 @weber67 您应该使用上面提到的 Sulthan 的某种插值。正确的逻辑是使用从触摸中获得的点来实现插值线图。但复杂的数字可能会很慢。 您可以使用线条代替插值。只需用图案制作颜色并在相邻点之间画线。但是在touchesBegantouchesEnded 中需要一些额外的逻辑才能让图形有空格。如果您需要,我可以更正我的答案:) @AndreyChevozerov & Sulthan 谢谢。我已经编辑了我的代码,但我发现我仍然有相同的结果。请告诉我,我在哪里犯了错误。

以上是关于书法绘图 IOS Coregraphics的主要内容,如果未能解决你的问题,请参考以下文章

毛笔书法

当代著名书法家潘兴东书法欣赏(十九)

Word小技巧:怎么用Microsoft Word制作书法字帖?

iOS绘图框架CoreGraphics分析

陆游书法真迹,堪称书法大家!

“逸情问草”钟国友书法篆刻展在金华举行