Objective c 如何使用drawAtPoint()覆盖UIImage?

Objective c 如何使用drawAtPoint()覆盖UIImage?,objective-c,uiimage,Objective C,Uiimage,以下代码在图像上绘制一些文本: UIGraphicsBeginImageContext(image.size); [image drawAtPoint:CGPointZero]; NSString *stamp = @"Internal Use Only"; [stamp drawAtPoint:CGPointMake(10, 10) withFont:[UIFont systemFontOfSize:32]]; UIImage *stampedImage = UIGraphicsGetIm

以下代码在图像上绘制一些文本:

UIGraphicsBeginImageContext(image.size);
[image drawAtPoint:CGPointZero];

NSString *stamp = @"Internal Use Only";
[stamp drawAtPoint:CGPointMake(10, 10) withFont:[UIFont systemFontOfSize:32]];

UIImage *stampedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

如果使用不同的字符串再次执行代码,则两个字符串将合并在一起,并且不清晰。如何使drawAtPoint()覆盖上一个字符串?

每次要在原始图像上绘制文本时,都必须复制原始图像。换句话说,您必须保留图像的原始版本。

我可以通过渲染UITextView来实现这一点。它们知道如何通过其图层特性绘制自己,并且可以显示多条线(增加了额外的好处!):


是的,但不幸的是,原始图像将被其他人修改。我必须在图像的同一区域放置一个图章。这就是为什么我想以某种方式“擦除”旧邮票,并在其上呈现一个新的。由其他人?您不能只是从图像中删除戳记,唯一的方法是将图像的原始部分保存在戳记下。Earse的意思是——将图像恢复到以前的状态,所以,您只需“记住”要恢复的状态。您可以保存整个图像或只是部分图像-这取决于您的戳记指标…因此,我得到一张图像,并使用此代码在右上角(10,10)处使用今天的日期戳记图像。然后,我将这个盖章的图像发送给另一个绘制其他内容的进程(例如中间的红色圆圈)。明天我会得到这张照片,里面有红色的圆圈和我的原始邮票。我需要在这张图片上重新印上今天的日期。但是如果我在图像上再次运行此代码,它将在原始日期的顶部呈现。那么,如何再次标记图像,使其完全覆盖原始(昨天)日期呢?在这种情况下,您最好使用两个分开的图像:原始图像和带有标记和红色圆圈的图像。没有神奇的算法可以恢复印章下的原始图像信息。如果使用两个单独的图像,您不需要每次都合并它,但前提是您确实需要合并它,例如将其序列化为平面图像。请记住,您可以使用两个UIImageView控件(一个在另一个之下)分别显示这些图像。
CGContextRef context = UIGraphicsGetCurrentContext();
NSString *stamp = @"Internal Use Only";
CGRect frame = CGRectMake(0, 0, 120, 80);
textview.frame = frame;
textview.text = stamp;
textview.font = [UIFont systemFontOfSize:32];
[textview.layer renderInContext:context];