swift之Mac中NSView视图里的截图【ScrollView中的内容截图】
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中的内容截图】相关推荐
- PullScrollView详解(六)——延伸拓展(listview中getScrollY()一直等于0、ScrollView中的overScrollBy)
前言:经常说follow your heart.但等到真到这么一天的时候,却很艰难 相关文章: 1.<PullScrollView详解(一)--自定义控件属性> 2.<PullScr ...
- eclipse中自定义视图_如何在Windows中自定义文件夹视图设置
eclipse中自定义视图 While the Windows File Explorer seems somewhat simplified compared to older versions, ...
- java方法中的循环里的变量_Java中循环声明变量方法
Java循环声明变量 之前想这样做,但是网上一直搜索不到,下面是我的方式 项目中 // 得到需要查询外表的数量,然后分别创建缓存,插入数据多的时候如果编码在缓存里面,就不需要再去查询数据库了.key: ...
- SAP Batch Management 批次主数据中classification视图中GR Date没有被更新?
SAP Batch Management 批次主数据中classification视图中GR Date没有被更新? 如下图的批次,是在101收货的时候系统自动创建的, 该批次都没能完成classifi ...
- 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 ...
- oracle怎么把数据跑进视图里,在Oracle中向视图中插入数据的方法
在Oracle中向视图中插入数据的方法 插入视图的条件: 1.如果视图是基于一个基础表产生的,那么这就称为非连接视图,所有的非连接视图都是可以更新的,也就是说可以在该视图上进行,INSERT,UPDA ...
- Swift - 使用addSubview()方法将StoryBoard中的视图加载进来
使用 Storyboard 我们可以很方便地搭建好各种复杂的页面,同时通过 segue 连接可以轻松实现页面的跳转. 但除了segue,我们还可以使用纯代码的方式实现Storyboard界面的跳转. ...
- 基于Swift的Mac App开发之——1.了解编程语言
1.了解编程语言 编程无非是为计算机编写一步一步的指令. 如果您曾经写下食谱的步骤或在假期中草拟照顾宠物的指示,那么您已经完成了编写程序的基本步骤. 关键是简单地知道你想完成什么,然后确保你写出正确的 ...
- Android中View(视图)绘制不同状态背景图片原理深入分析以及StateListDrawable使用详解...
2019独角兽企业重金招聘Python工程师标准>>> 今天继续给大家分享下View的相关知识,重点有一下两点: 1.View的几种不同状态属性 2.如何根 ...
最新文章
- 你的应用是如何被替换的,App劫持病毒剖析
- 折腾一天总结下安装centos的安装方法。。。
- dedecms 备份和恢复的完整流程
- excel随机排序,在A列产生顺序号
- web项目的创建和发布
- RequestDispatcher提供两个方法:forward,include有什么区别
- 诚通网盘会员很坑的,升级会员的人要注意
- Flash中与xml交互时不显示中文的解决办法
- 【Linux】解决用vi修改文件,保存文件时,提示“readonly option is set”
- python3.5和python3.6关于json模块的区别
- python 从入门到实践_Python编程从入门到实践日记Day36
- 理解GAN网络基本原理
- go的内存管理和内存逃逸
- 会议__零碎知识点总结
- X-Ways Forensics: 综合取证分析工具
- redis专题-----11-----redis订阅发布以及stream
- web前端程序员职位介绍
- Spark 基础知识
- Android学习网址大全
- UVA1595(对称轴)
热门文章
- java cookie 取不到_java中Servlet Cookie取不到值原因解决办法
- 【Java】京东面试:说说MySQL的架构体系
- 收藏 | 图像处理Transformer:华为诺亚、北大等IPT模型,刷榜
- GolVe向量化做文本分类
- windows 安装tensorflow
- c++求区间第k大数_翔哥炒股经验23 K线形态学50节 第10节:K线区间震荡
- html页面怎么引用通用的头部,html 如何引入一个公共的头部和底部
- html5 制作商品显示介绍,HTML5+CSS3:3D展示商品信息示例
- matlab人民币识别,Matlab图像处理学习笔记(六):基于sift特征点的人民币识别...
- Java基础---数组练习(最大值、最小值的索引)