import Foundation

import Cocoa

在视图中的方法

extension NSView {

/****1.

在drawRect方法中绘制

使用Quartz2D绘图函数在视图上绘制圆角矩形

****/

override func draw(_ dirtyRect: NSRect) {

super.draw(dirtyRect)

NSColor.blue.setFill()

let frame = self.bounds

let path = NSBezierPath()

path.appendRoundedRect(frame, xRadius: 10, yRadius: 10)

path.fill()

}

/***2

在drawRect方法之外实现绘制,需要使用lockFocus方法锁定视图,完成绘图后在执行unlockFocus解锁

drawRect方法与lockFocus锁定方式不能同时使用

***/

func drawViewShape(){

self.lockFocus()

let text: NSString = "RoundedRect"

let font = NSFont(name: "Palatino-Roman", size: 12)

let attrs = [NSAttributedString.Key.font: font,NSAttributedString.Key.foregroundColor:NSColor.red]

let location = NSPoint(x: 50, y: 50)

text.draw(at: location, withAttributes: attrs)

self.unlockFocus()

}

/****3

视图截屏

***/

func saveSelfAsImage() {

self.lockFocus()

let image = NSImage(data: self.dataWithPDF(inside: self.bounds))

self.unlockFocus()

let imageData = image!.tiffRepresentation

let fileManager = FileManager.default

//制定文件路径

let path = "/Users/.../Documents/myCapture.png"

fileManager.createFile(atPath: path, contents: imageData, attributes: nil)

//保存结束后Finder中自动定位到文件路径

let fileUrl = URL(fileURLWithPath: path)

NSWorkspace.shared.activateFileViewerSelecting([fileUrl])

  }

//如果视图比较大,是带滚动条的大视图,则按下面的方法处理可以保证获得整个滚动页面的截图

func saveScrollViewAsImage() {

//

let pdfdata = self.dataWithPDF(inside: self.bounds)

//        self.dataWithEPS(inside: self.bounds)  ????

let imageRep = NSPDFImageRep(data: pdfdata)!

let count = imageRep.pageCount

for i in 0..<count {

imageRep.currentPage = i

let tempImage = NSImage()

tempImage.addRepresentation(imageRep)

let rep = NSBitmapImageRep(data: tempImage.tiffRepresentation!)

let imageData = rep?.representation(using: NSBitmapImageRep.FileType.png, properties: [:])

//NSBitmapImageRep.PropertyKey : Any

let fileManager = FileManager.default

//制定文件路径

let path = "/Users/.../Documents/myCapture.png"

fileManager.createFile(atPath: path, contents: imageData, attributes: nil)

//保存结束后Finder中自动定位到文件路径

let fileUrl = URL(fileURLWithPath: path)

NSWorkspace.shared.activateFileViewerSelecting([fileUrl])

}

}

}

改写为工具类中的方法

期待中

转载于:https://www.cnblogs.com/sundaymac/p/10334961.html

swift之Mac中NSView视图里的截图【ScrollView中的内容截图】相关推荐

  1. PullScrollView详解(六)——延伸拓展(listview中getScrollY()一直等于0、ScrollView中的overScrollBy)

    前言:经常说follow your heart.但等到真到这么一天的时候,却很艰难 相关文章: 1.<PullScrollView详解(一)--自定义控件属性> 2.<PullScr ...

  2. eclipse中自定义视图_如何在Windows中自定义文件夹视图设置

    eclipse中自定义视图 While the Windows File Explorer seems somewhat simplified compared to older versions, ...

  3. java方法中的循环里的变量_Java中循环声明变量方法

    Java循环声明变量 之前想这样做,但是网上一直搜索不到,下面是我的方式 项目中 // 得到需要查询外表的数量,然后分别创建缓存,插入数据多的时候如果编码在缓存里面,就不需要再去查询数据库了.key: ...

  4. SAP Batch Management 批次主数据中classification视图中GR Date没有被更新?

    SAP Batch Management 批次主数据中classification视图中GR Date没有被更新? 如下图的批次,是在101收货的时候系统自动创建的, 该批次都没能完成classifi ...

  5. CREATE VIEW SQL:通过SQL Server中的视图插入数据

    This is the third article in a series of learning the CREATE VIEW SQL statement. So far, I'd say tha ...

  6. oracle怎么把数据跑进视图里,在Oracle中向视图中插入数据的方法

    在Oracle中向视图中插入数据的方法 插入视图的条件: 1.如果视图是基于一个基础表产生的,那么这就称为非连接视图,所有的非连接视图都是可以更新的,也就是说可以在该视图上进行,INSERT,UPDA ...

  7. Swift - 使用addSubview()方法将StoryBoard中的视图加载进来

    使用 Storyboard 我们可以很方便地搭建好各种复杂的页面,同时通过 segue 连接可以轻松实现页面的跳转. 但除了segue,我们还可以使用纯代码的方式实现Storyboard界面的跳转. ...

  8. 基于Swift的Mac App开发之——1.了解编程语言

    1.了解编程语言 编程无非是为计算机编写一步一步的指令. 如果您曾经写下食谱的步骤或在假期中草拟照顾宠物的指示,那么您已经完成了编写程序的基本步骤. 关键是简单地知道你想完成什么,然后确保你写出正确的 ...

  9. Android中View(视图)绘制不同状态背景图片原理深入分析以及StateListDrawable使用详解...

    2019独角兽企业重金招聘Python工程师标准>>> 今天继续给大家分享下View的相关知识,重点有一下两点:   1.View的几种不同状态属性            2.如何根 ...

最新文章

  1. 你的应用是如何被替换的,App劫持病毒剖析
  2. 折腾一天总结下安装centos的安装方法。。。
  3. dedecms 备份和恢复的完整流程
  4. excel随机排序,在A列产生顺序号
  5. web项目的创建和发布
  6. RequestDispatcher提供两个方法:forward,include有什么区别
  7. 诚通网盘会员很坑的,升级会员的人要注意
  8. Flash中与xml交互时不显示中文的解决办法
  9. 【Linux】解决用vi修改文件,保存文件时,提示“readonly option is set”
  10. python3.5和python3.6关于json模块的区别
  11. python 从入门到实践_Python编程从入门到实践日记Day36
  12. 理解GAN网络基本原理
  13. go的内存管理和内存逃逸
  14. 会议__零碎知识点总结
  15. X-Ways Forensics: 综合取证分析工具
  16. redis专题-----11-----redis订阅发布以及stream
  17. web前端程序员职位介绍
  18. Spark 基础知识
  19. Android学习网址大全
  20. UVA1595(对称轴)

热门文章

  1. java cookie 取不到_java中Servlet Cookie取不到值原因解决办法
  2. 【Java】京东面试:说说MySQL的架构体系
  3. 收藏 | 图像处理Transformer:华为诺亚、北大等IPT模型,刷榜
  4. GolVe向量化做文本分类
  5. windows 安装tensorflow
  6. c++求区间第k大数_翔哥炒股经验23 K线形态学50节 第10节:K线区间震荡
  7. html页面怎么引用通用的头部,html 如何引入一个公共的头部和底部
  8. html5 制作商品显示介绍,HTML5+CSS3:3D展示商品信息示例
  9. matlab人民币识别,Matlab图像处理学习笔记(六):基于sift特征点的人民币识别...
  10. Java基础---数组练习(最大值、最小值的索引)