2016-08-18 69 views
1

我有NSSplitView与两个IKImageView在两边比较他们彼此。我试图实现打印功能,但图像在预览中消失。 (What should be printed VS What I getIKImageView图像打印时不可见

我试了一下:

基于docs,在splitView锁定焦点,并直接与

[[NSPrintOperation printOperationWithView:view] runOperation];

打印出来,但只要文档指出

如果UI包含多个可以进行焦点查看的视图打印不会科技工作的很好。

我试图作出的splitView的“截图”(Method 1Method 2),单NSImageView创造新viewController,显示我有截图,然后打印ImageView的。但即使在屏幕截图中图像也不可见。

重要的是,如果我使用NSImageViews而不是IKImageViews,打印工作得很好。

我还能试试吗?(双方objective-cswift解决方案,将工作)

+0

是不是只是做一个指针,然后分配一个IKImageView对象到打印操作方法的问题,因为IKImageView是NSView的子类? –

+0

也许有关:[是否有可能以编程方式在Cocoa中打印IKImageBrowserView?](http://stackoverflow.com/questions/10648544/is-it-possible-to-print-ikimagebrowserview-in-cocoa-programmatically) – Willeke

+0

@ElTomato我在'NSSplitView'中并排放置了两个'IKImageViews',我需要一起打印。 – arsena

回答

0

终于找到了解决方法(同样考虑到了缩放级别)。我从IKImageViews得到NSImages,将它们传递给新的ViewController,我在那里显示要打印的内容的预览。在该视图控制器中,我有一个简单的NSView(rootView)和两个NSImagesViews并排。我将我的图像从IkImageViews设置为NSImageViews,然后打印rootView。

这是我如何得到NSImagesIkImageViews

步骤: 获取可见/裁剪/缩放从IkImageView RECT;从IKImageView'sCGImageRef创建NSImage;创建新的NSImage并在其中绘制裁剪图像。

注: OBJ-C语法可能是有点错了,我从来没有写过之前(Xamarin开发)OBJ-C的连一行。

的Objective-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; 
    } 

希望有人会找到答案有用。

+0

''[croppedRect lockFocus]'应该是[croppedImage lockFocus]? – Willeke

+0

@Willeke确定,谢谢。编辑。 – arsena