【问题标题】:How to "undo" when we draw in iPhone SDK? [closed]当我们在 iPhone SDK 中绘图时如何“撤消”? [关闭]
【发布时间】:2012-03-20 15:32:04
【问题描述】:

我有一个绘图应用程序,我想在其中实现 UNDO 功能,以便用户可以撤消已完成的最后一次绘图。

你能告诉我这是怎么做的吗?

谢谢

【问题讨论】:

  • 请添加更多详细信息。

标签: iphone objective-c ios cocoa-touch


【解决方案1】:
-(void)undoButtonClicked
{

    if([pathArray count]>0){
        UIBezierPath *_path=[pathArray lastObject];
        [pathArray removeLastObject];
        [bufferArray addObject:_path];
        [self setNeedsDisplay];
    }

}

【讨论】:

  • 它的工作原理?或者更多
  • 当我不使用 UIBezierPath 时呢?那我用这个? [curImage drawAtPoint:CGPointMake(0, 0)]; CGPoint mid1 = midPoint(previousPoint1, previousPoint2); CGPoint mid2 = midPoint(currentPoint, previousPoint1);上下文 = UIGraphicsGetCurrentContext(); [self.layer renderInContext:context];
【解决方案2】:

首先请说明你用什么来画画。您是否使用任何 API 或核心图形框架进行绘图。

这是我找到的链接中的一些方法。

方法:

  1. 在 touchesEnded 时,将图像保存到应用程序沙箱,名称如.. 1.png、2.png 等,然后计算“撤消”变量。当用户按下撤消时,只需根据计数加载旧图像。 (这是我能粗略想到的,但还没有完成它的编码,但听起来编码很简单)。

  2. NSUndoManager。

希望这对其他想要这样做的人有所帮助。

参考链接:

http://www.iphonedevsdk.com/forum/iphone-sdk-development/46996-drawing-app-how-do-undo.html

干杯

【讨论】:

    【解决方案3】:

    这取决于很多事情,您必须更具体地说明您使用的是什么绘图方法,例如,如果您正在谈论“铅笔”笔划并且您的绘图方法使用石英来绘制一些东西,而您只是对最后的笔划或更改感兴趣,您始终可以保存当前的图形上下文(图像上下文或其他内容)并在撤消的情况下显示它。如果要允许撤消多个笔划,则必须将它们添加到数组中,以便重新绘制撤消。如果您使用的是 open gl,那么它也不同。

    【讨论】:

      【解决方案4】:

      非 iPhone 专用

      像素画布:

      您的选择是将整个画布或被笔划覆盖的区域的快照保存在堆栈中。 撤消操作会弹出您的撤消堆栈并重绘您堆叠的缓冲区。

      不方便的是适当调整撤消限制的大小以避免占用内存。

      矢量图:

      这几乎是微不足道的......

      【讨论】:

        【解决方案5】:

        我的简单解决方案是, 1. 存储 CGPath 。 2.可以使用clear blend mode绘制路径来清除它。

        CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeClear);
        

        【讨论】:

        • 不准确,最后一个笔画可以覆盖其他笔画,所以用背景色绘制相同的路径也会擦除旧路径,这是不可接受的,加上它没有考虑到stoke属性(例如宽度或结束大写)
        • 当然你必须使用相同的属性来重绘它。使用混合模式更新答案。
        猜你喜欢
        • 2011-05-28
        • 1970-01-01
        • 1970-01-01
        • 2011-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-22
        • 1970-01-01
        相关资源
        最近更新 更多