gpt4 book ai didi

ios - 带撤消的 CGBitmapContextCreate 效果不佳

转载 作者:行者123 更新时间:2023-11-29 11:28:40 25 4
gpt4 key购买 nike

几天来我一直在为撤消功能苦苦挣扎,我真的不知道如何解决这个问题。

我在使用自定义 UIimageView 的 UIViewController 上制作绘图功能。

问题是当我触发撤消功能时,之前的绘图没有问题,但是当我尝试再次绘制时,删除的绘图再次出现在当前绘图中。

这是我的代码。如果您发现任何问题,请告诉我!这真的很有帮助。谢谢!

- (IBAction)Pan:(UIPanGestrueRecognizer *)pan {
CGContextRef ctxt = [self drawingContext];

CGContextBeginPath(ctxt);
CGContextMoveToPoint(ctxt, previous.x, previous.y);
CGContextAddLineToPoint(ctxt, current.x, current.y);
CGContextStrokePath(ctxt);

CGImageRef img = CGBitmapContextCreateImage(ctxt);
self.costomImageView.image = [UIImage imageWithCGImage:img];
CGImageRelease(img);
previous = current;
...
}

- (CGContextRef)drawingContext {
if(!context) { // context is an instance variable of type CGContextRef
CGImageRef image = self.customImageView.image.CGImage;
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
if(!colorSpace) return nil;
context = CGBitmapContextCreate(NULL,
CGImageGetWidth(image), CGImageGetHeight(image),
8, CGImageGetWidth(image) * 4,
colorSpace, kCGImageAlphaPremultipliedLast
);
CGColorSpaceRelease(colorSpace);
if(!context) return nil;
CGContextConcatCTM(context, CGAffineTransformMake(1,0,0,-1,0,self.customeImageView.image.size.height));

CGContextSaveGState(context);
CGContextTranslateCTM(context, 0.0, self.customImageView.image.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextDrawImage(context, (CGRect){CGPointZero,self.customImageView.image.size}, image);
CGContextRestoreGState(context);

CGContextSetLineCap(context, kCGLineCapRound);
CGContextSetLineWidth(context, 4.f);
CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);
}
return context;
}

最佳答案

我不确定 UndoManager 是否支持您尝试执行的操作

我个人会做的是这样的:

  1. 创建一个 NSMutableArray 来包含您所有的绘图笔画。一个包含两个 Point 实例的结构应该可以完成这项任务。如果您想花哨一些,您可以添加一个 UIColor 实例来设置颜色以及其他样式信息的更多变量。

  2. 当您的平移手势开始时,记录它开始的点。当它结束时,记录那个点,创建你的结构的一个实例并将它添加到数组中。

  3. 具有清除图形上下文、遍历数组并绘制到屏幕的渲染过程。

对于撤消功能,您需要做的就是从数组中删除最后一个条目并重新渲染。

关于ios - 带撤消的 CGBitmapContextCreate 效果不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55982482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com