我有NSSplitView
两边有两个IKImageView
来比较它们。我正在尝试实现打印功能,但图像在预览时消失。 (What should be printed vs What I get)
我尝试了什么:
基于docs,将焦点锁定在splitView
上并直接用
[[NSPrintOperation printOperationWithView:view] runOperation];
但只要文档说明
如果UI包含多个可以进行基于焦点视图的打印的视图,则效果不佳。
我尝试制作splitView
的“屏幕截图”(Method 1,Method 2),使用单个viewController
创建新的NSImageView
,在那里显示我的屏幕截图然后打印imageView。但即使在截图中也没有看到图像。
重要的是,如果我使用NSImageViews
代替IKImageViews
,打印效果会很好。
我还能尝试什么?(objective-c
和swift
解决方案都可以使用)
答案 0 :(得分:0)
终于找到了解决方法(还考虑了缩放级别)。我从NSImages
获得IKImageViews
,将其传递给新的ViewController
,其中显示了将要打印的内容的预览。在那个viewcontroller中,我有一个简单的NSView
(rootView),并排有两个NSImagesViews
。我将图像从IkImageViews
设置为NSImageViews
,然后打印rootView。
以下是我从NSImages
获取IkImageViews
的方法:
<强>步骤:强>
从IkImageView
获取可见/裁剪/缩放的矩形;从NSImage
IKImageView's
创建CGImageRef
;创建新的NSImage
并将裁剪后的图像绘制到其中。
注意: obj-c语法可能有点不对,我以前从未写过一行obj-c(Xamarin Developer)。
<强>目标C:强>
NSRect croppedRect = [imageView convertViewRectToImageRect:[imageView visibleRect]];
NSImage srcImage = [[NSImage alloc] initWithCGImage:[imageView image] size:NSZeroSize];
NSImage croppedImage = [[NSImage alloc] initWithSize:croppedRect.size];
[croppedImage lockFocus];
[srcImage drawAtPoint:NSZeroPoint
fromRect:croppedRect
operation:NSCompositeCopy
fraction:1.0];
[croppedImage unlockFocus];
return croppedImage;
<强> C#(Xamarin):强>
NSImage GetImageToPrint()
{
var cropRect = LeftImage.ConvertViewRectToImageRect(LeftImage.VisibleRect());
NSImage srcImage = new NSImage(LeftImage.Image, LeftImage.ImageSize);
NSImage croppedImage = new NSImage(cropRect.Size);
croppedImage.LockFocus();
srcImage.Draw(CGPoint.Empty, cropRect, NSCompositingOperation.Copy, 1.0f);
croppedImage.UnlockFocus();
return croppedImage;
}
希望任何人都能找到有用的答案。