我正在绘制一个绘图应用程序,我有一个UIBezeirPath,我在touchesMoved中绘制它,并将其转换为CGPath然后绘制到CGlayer,
这是我的代码
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
self.currentPath = [[DrawingPath alloc] init];
if(m_eraseButtonClicked)
{
[self.currentPath setPathColor:[UIColor backgroundColor]];
}
else
{
[self.currentPath setPathColor:self.lineColor];
}
CGPathRef cgPath = self.currentPath.path.CGPath;
mutablePath = CGPathCreateMutableCopy(cgPath);
}
- (void)Erase
{
CGContextRef layerContext = CGLayerGetContext(self.DrawingLayer);
CGContextSetBlendMode(layerContext,kCGBlendModeClear);
CGContextSetLineWidth(layerContext, self.eraseWidth);
CGContextBeginPath(layerContext);
CGContextAddPath(layerContext, mutablePath);
CGContextStrokePath(layerContext);
}
- (void)UndoRedoFunction
{
//Undo/Redo
for(int i =0; i<[undoArray count];i++)
{
DrawingPath *drawPath = [undoArray objectAtIndex:i];
CGPathRef path = drawPath.path.CGPath;
mutablePath = CGPathCreateMutableCopy(path);
CGContextBeginPath(layerContext);
CGContextAddPath(layerContext, mutablePath);
CGContextSetLineWidth(layerContext, drawPath.pathWidth.floatValue);
CGContextSetStrokeColorWithColor(layerContext, drawPath.pathColor.CGColor);
CGContextSetFillColorWithColor(layerContext, drawPath.pathColor.CGColor);
CGContextSetBlendMode(layerContext,kCGBlendModeNormal);
CGContextStrokePath(layerContext);
CGPathRelease(mutablePath);
}
}
擦除工作正常,因为我使用blendMode Clear,但是当你看到撤消/重做时,我从路径获取pathColor并使用blenModeNormal描述它,我看到一条白线,
下面是我写完后的图像 - &gt; erase-&gt; undo-&gt; redo
答案 0 :(得分:0)
您是否正确粘贴了代码?如图所示,-touchesMoved:withEvent方法在第14行左右关闭,就在//Erase
语句之前。这意味着你的CGContextRef现在是一个类变量,你的for循环永远不会被任何人执行,我认为它不会编译,因此我想知道你是否省略了一些代码。