macOS 開發(fā)-NSView API

NSView用于在應用程序中渲染倒槐、打印以及處理事件的基礎容器讨越。

概要

通常我們不需要直接使用NSView對象把跨,而是使用其派生的對象或實現(xiàn)的子類并覆蓋其方法來實現(xiàn)所需的行為卷雕。NSView(或其子類)的實例通常稱為視圖對象漫雕,或簡稱為視圖浸间。

視圖可以處理應用程序的展示內容及其交互魁蒜。視圖對象定義了一個矩形區(qū)域兜看,用于繪制和接收鼠標事件细移。視圖還可以處理其他瑣事熊锭,包括拖動圖標以及與類一起使用以支持有效的滾動碗殷。

NSView該類的大多數功能都是由AppKit自動調用的锌妻。除非您NSView在運行時實現(xiàn)視圖層次結構的具體子類或與視圖層次結構的內容緊密聯(lián)系仿粹,否則您無需了解此類的接口。對于任何視圖员咽,可以按原樣使用許多方法贝室。通常使用以下方法滑频。

  • frame返回視圖的位置和大小峡迷。
  • bounds返回視圖的內部原點和大小绘搞。
  • needsDisplay視圖是否需要重繪對象傅物。
  • window返回NSWindow包含該NSView對象的對象董饰。
  • draw(_:)繪制視頻對象(所有子類都必須實現(xiàn)此方法卒暂,但是很少顯式調用它)也祠。

子類化說明

NSView是AppKit中子類化和繼承時最重要的類齿坷,在Cocoa應用程序中看到的大多數用戶界面對象都是繼承自的對象NSView永淌。如果您要創(chuàng)建一個以特殊方式繪制自身的對象遂蛀,或者以一種特殊方式響應鼠標單擊的對象,則可以創(chuàng)建的自定義子類NSView(或繼承自NSView)蛮瞄。

處理您子類中的事件

如果NSView子類化并處理特定類型的事件時挂捅,通常不應調用與事件相關的方法的實現(xiàn)super闲先。視圖從NSResponder其父類繼承其事件處理功能伺糠。響應者的默認行為是將事件傳遞到響應者鏈上训桶,如果您在自定義視圖中處理事件舵揭,這通常不是您想要的行為琉朽。因此,如果您的視圖實現(xiàn)以下任何方法并處理事件惕医,則不應調用super

  • mouseDown(with:)
  • mouseDragged(with:)
  • mouseUp(with:)
  • mouseMoved(with:)
  • mouseEntered(with:)
  • mouseExited(with:)
  • rightMouseDragged(with:)
  • rightMouseUp(with:)
  • otherMouseDown(with:)
  • otherMouseDragged(with:)
  • otherMouseUp(with:)
  • scrollWheel(with:)
  • keyDown(with:)
  • keyUp(with:)
  • flagsChanged(with:)
  • tabletPoint(with:)
  • tabletProximity(with:)

注意

因為 NSView更改 rightMouseDown:方法的默認行為, 所有在子類化時需要調用super抬伺。

如果你的視圖繼承自一個類而不是NSView峡钓,調用super讓父視圖處理任何你不處理的事件能岩。

核心API

創(chuàng)建實例

//初始化對象
init(frame: NSRect)
// 將視圖恢復到初始狀態(tài)拉鹃,以便可以重用
func prepareForReuse()

管理視圖層次結構

// 獲取當前視圖的父視圖
var superview: NSView?
// 當前視圖中所有子視圖
var subviews: [NSView]
// 視圖的窗口對象(如果已安裝在窗口中)
var window: NSWindow?
// 將視圖添加為指定視圖的子視圖
func addSubview(NSView)
// 在視圖的子視圖中插入一個視圖钥屈,以便將其顯示在另一個視圖的上方或下方
func addSubview(NSView, positioned: NSWindow.OrderingMode, relativeTo: NSView?)
// 當子視圖添加到視圖時回調篷就,子類可重寫以執(zhí)行其他操作
func didAddSubview(NSView)
// 從父視圖中移除
func removeFromSuperview()
// Unlinks the view from its superview and its window and removes it from the responder chain, but does not invalidate its cursor rectangles to cause redrawing.
func removeFromSuperviewWithoutNeedingDisplay()
// 用另一個視圖替換一個視圖的子視圖
func replaceSubview(NSView, with: NSView)
// 判斷視圖是不是給定視圖的子類
func isDescendant(of: NSView) -> Bool
// 視圖最接近的不透明祖先腻脏,可能是視圖本身
var opaqueAncestor: NSView?
// 返回該視圖和另一個指定視圖共享的最接近的祖先
func ancestorShared(with: NSView) -> NSView?
// 使用指定的比較器函數對視圖的直接子視圖進行排序
func sortSubviews((NSView, NSView, UnsafeMutableRawPointer?) -> ComparisonResult, context: UnsafeMutableRawPointer?)
// 通知視圖其父視圖已更改
func viewDidMoveToSuperview()
// 通知視圖它已經被添加到一個新的視圖層次結構中永品。
func viewDidMoveToWindow()
// 通知視圖其超級視圖即將更改為指定的超級視圖(可能為nil)
func viewWillMove(toSuperview: NSView?)
// 通知視圖正在將其添加到指定窗口對象的視圖層次結構(可能為`nil`)
func viewWillMove(toWindow: NSWindow?)
// 子視圖將被刪除
func willRemoveSubview(NSView)
// 包含視圖或其視圖層次結構中的任何超級視圖的菜單項
var enclosingMenuItem: NSMenuItem?

修改frame

// 視圖的框架矩形鼎姐,用于定義其在父視圖的坐標系中的位置和大小
var frame: NSRect
// 將視圖的原點設置為指定點
func setFrameOrigin(NSPoint)
// 將視圖設置為指定的尺寸,在其父視圖內調整其大小而不影響其坐標系
func setFrameSize(NSSize)
// 旋轉角度(以度為單位)應用于相對于其超級視圖坐標系的視圖
var frameRotation: CGFloat

修改bounds

// 視圖的邊界矩形献宫,表示其在自己的坐標系中的位置和大小
var bounds: NSRect
// 將視圖的邊界矩形的原點設置為指定點
func setBoundsOrigin(NSPoint)
// 將視圖的邊界矩形的大小設置為指定的尺寸
func setBoundsSize(NSSize)
// 旋轉角度(以度為單位)
var boundsRotation: CGFloat

管理視圖層

// 設置為true時姊途,轉換成可支持Layer的視圖捷兰,即使用一個CALayer對象來管理呈現(xiàn)內容贡茅,會隱式地將所有子視圖支持該屬性
var wantsLayer: Bool
// 指示視圖在更新其內容時采用的繪制路徑
var wantsUpdateLayer: Bool
// 視圖用作其后備存儲的核心動畫層
var layer: CALayer?
// 創(chuàng)建視圖的襯里層
func makeBackingLayer() -> CALayer
// 當前層內容放置策略
var layerContentsPlacement: NSView.LayerContentsPlacement
// 視圖層的內容重繪策略
var layerContentsRedrawPolicy: NSView.LayerContentsRedrawPolicy
// 指示視圖是否將來自其子視圖的內容合并到自己的圖層中
var canDrawSubviewsIntoLayer: Bool
// 指示視圖的圖層是否使用Core Image濾鏡并需要進行進程內渲染
var layerUsesCoreImageFilters: Bool
// 可選的圖層委托方法顶考,用于處理分辨率更改
protocol NSViewLayerContentScaleDelegate

圖層相關屬性

// 視圖的不透明度
var alphaValue: CGFloat
// 視圖圍繞其圖層中心的旋轉角度
var frameCenterRotation: CGFloat
// 一組核心圖像濾鏡驹沿,可應用于視圖的背景
var backgroundFilters: [CIFilter]
// 濾鏡用于將視圖的內容與其背景進行合成
var compositingFilter: CIFilter?
// 一組核心圖像濾鏡甚负,可應用于視圖及其子層的內容
var contentFilters: [CIFilter]
// 視圖下方顯示陰影
var shadow: NSShadow?

繪制

// 通過修改其基礎層來更新視圖的內容
func updateLayer()
// 被子類重寫以在指定的矩形內繪制視圖的圖像
func draw(NSRect)
// 指示視圖是否可以在后臺線程上繪制其內容
var canDrawConcurrently: Bool
// 視圖的未被其父視圖剪切的部分
var visibleRect: NSRect
// 通過間接返回不重疊矩形的列表梭域,這些列表定義了要求繪制視圖的區(qū)域draw(_:)
func getRectsBeingDrawn(UnsafeMutablePointer?>?, count: UnsafeMutablePointer?)
// 該值指示指定的矩形是否與要求繪制視圖的區(qū)域的任何部分相交 
func needsToDraw(NSRect) -> Bool
// 指示AppKit的默認裁剪行為是否有效
var wantsDefaultClipping: Bool
// 返回適合緩存視圖的指定部分的位圖表示對象
func bitmapImageRepForCachingDisplay(in: NSRect) -> NSBitmapImageRep?
// 將視圖的指定區(qū)域及其后代繪制到提供的位圖表示對象中
func cacheDisplay(in: NSRect, to: NSBitmapImageRep)

打印

// 此操作方法將打開“打印”面板富玷,如果用戶選擇了“取消”以外的選項赎懦,則將視圖及其所有子視圖打印到“打印”面板中指定的設備上
func printView(Any?)
// 在每個頁面的開頭調用此方法励两,以設置坐標系当悔,以便將視圖范圍內的區(qū)域轉換為指定位置
func beginPage(in: NSRect, atPlacement: NSPoint)
// 返回在指定矩形內繪制視圖區(qū)域的EPS數據
func dataWithEPS(inside: NSRect) -> Data
// 返回在指定矩形內繪制視圖區(qū)域的PDF數據
func dataWithPDF(inside: NSRect) -> Data
// 視圖的打印作業(yè)標題
var printJobTitle: String
// 包含打印作業(yè)標題和日期的默認標題字符串
var pageHeader: NSAttributedString
// 默認的頁腳字符串盲憎,包括當前頁碼和頁數
var pageFooter: NSAttributedString
// 將EPS數據(其將指定矩形內的視圖區(qū)域繪制到粘貼板上)寫入
func writeEPS(inside: NSRect, to: NSPasteboard)
// 將將指定矩形內的視圖區(qū)域繪制到粘貼板上的PDF數據寫入
func writePDF(inside: NSRect, to: NSPasteboard)
// 允許使用AppKit分頁功能的應用程序在每個邏輯頁面上繪制其他標記
func drawPageBorder(with: NSSize)

分頁

// 在自動分頁過程中可以推到下一頁的頁面的一部分,以防止諸如文本行之類的項目在頁面之間劃分
var heightAdjustLimit: CGFloat
// 在自動分頁過程中可以推到下一頁的頁面的一部分窑眯,以防止諸如小圖像或文本列之類的內容在頁面之間劃分
var widthAdjustLimit: CGFloat
// 由子類重寫伸但,以在自動分頁期間調整頁面寬度
func adjustPageWidthNew(UnsafeMutablePointer, left: CGFloat, right: CGFloat, limit: CGFloat)
// 由子類重寫,以在自動分頁期間調整頁面高度
func adjustPageHeightNew(UnsafeMutablePointer, top: CGFloat, bottom: CGFloat, limit: CGFloat)
// 返回`true`視圖是否處理頁面邊界隔显,`false`否則返回
func knowsPageRange(NSRangePointer) -> Bool
// 由子類實現(xiàn)括眠,以確定要為指定頁碼打印的視圖部分
func rectForPage(Int) -> NSRect
// 調用以確定在物理頁面上打印的視圖區(qū)域的位置
func locationOfPrintRect(NSRect) -> NSPoint

無效視圖的內容

// 將指定矩形內的視圖區(qū)域標記為需要顯示捞烟,從而增加視圖的現(xiàn)有無效區(qū)域以將其包括在內
func setNeedsDisplay(NSRect)
// 用于確定視圖在顯示之前是否需要重繪
var needsDisplay: Bool
// 盡可能顯示視圖及其所有子視圖
func display()
// 充當display()题画,但將圖形限制在視圖的矩形區(qū)域苍息。
func display(NSRect)
// 顯示視圖竞思,但將繪圖限制在指定的區(qū)域盖喷,并且不備份到第一個不透明祖先传蹈,它僅使視圖及其后代執(zhí)行其繪圖代碼
func displayIgnoringOpacity(NSRect)
// 使視圖及其后代重新繪制到指定的圖形上下文
func displayIgnoringOpacity(NSRect, in: NSGraphicsContext)
// 如果視圖的任何部分已被標記為需要顯示惦界,則顯示該視圖及其所有子視圖
func displayIfNeeded()
// 補充displayIfNeeded沾歪,限制在視圖的指定區(qū)域
func displayIfNeeded(NSRect)
// 補充displayIfNeeded灾搏,除了此方法不會備份到第一個不透明祖先-它只是使視圖及其后代執(zhí)行其繪制代碼
func displayIfNeededIgnoringOpacity()
// 補充displayIfNeeded,但僅將繪圖限制在第一個不透明祖先上泉哈,而不是備份到第一個不透明祖先上丛晦,它只是使視圖及其后代執(zhí)行其繪圖代碼
func displayIfNeededIgnoringOpacity(NSRect)                                                                          
// 按指定的增量平移顯示矩形
func translateRectsNeedingDisplay(in: NSRect, by: NSSize)
// 指示視圖是否用不透明內容填充其框架矩形
var isOpaque: Bool
// 通知視圖將要繪制內容
func viewWillDraw()

轉換坐標值

// 返回以本地視圖坐標表示的后備存儲像素對齊的矩形
func backingAlignedRect(NSRect, options: AlignmentOptions) -> NSRect
// 將點從其像素對齊的后備存儲坐標系轉換為視圖的內部坐標系
func convertFromBacking(NSPoint) -> NSPoint
// 將點從視圖的內部坐標系轉換為其像素對齊的后備存儲坐標系
func convertToBacking(NSPoint) -> NSPoint
// 將點從圖層的內部坐標系轉換為視圖的內部坐標系
func convertFromLayer(NSPoint) -> NSPoint
// 將尺寸從視圖的內部坐標系轉換為圖層的內部坐標系
func convertToLayer(NSPoint) -> NSPoint
// 將矩形從其像素對齊的后備存儲坐標系轉換為視圖的內部坐標系
func convertFromBacking(NSRect) -> NSRect
// 將矩形從視圖的內部坐標系轉換為其像素對齊的后備存儲坐標系
func convertToBacking(NSRect) -> NSRect
// 將矩形從圖層的內部坐標系轉換為視圖的內部坐標系
func convertFromLayer(NSRect) -> NSRect
// 將尺寸從視圖的內部坐標系轉換為圖層的內部坐標系
func convertToLayer(NSRect) -> NSRect
// 將尺寸從其像素對齊的后備存儲坐標系轉換為視圖的內部坐標系
func convertFromBacking(NSSize) -> NSSize
// 將尺寸從視圖的內部坐標系轉換為其像素對齊的后備存儲坐標系
func convertToBacking(NSSize) -> NSSize
// 將尺寸從圖層的內部坐標系轉換為視圖的內部坐標系
func convertFromLayer(NSSize) -> NSSize
// 將尺寸從視圖的內部坐標系轉換為圖層的內部坐標系
func convertToLayer(NSSize) -> NSSize
// 將點從給定視圖的坐標系轉換為視圖的坐標系
func convert(NSPoint, from: NSView?) -> NSPoint
// 將點從視圖的坐標系轉換為給定視圖的坐標系
func convert(NSPoint, to: NSView?) -> NSPoint
// 將尺寸從另一個視圖的坐標系轉換為該視圖的坐標系
func convert(NSSize, from: NSView?) -> NSSize
// 將尺寸從視圖的坐標系轉換為另一個視圖的坐標系
func convert(NSSize, to: NSView?) -> NSSize
// 將矩形從另一個視圖的坐標系轉換為該視圖的坐標系
func convert(NSRect, from: NSView?) -> NSRect
// 將矩形從視圖的坐標系轉換為另一個視圖的坐標系
func convert(NSRect, to: NSView?) -> NSRect
// 將指定矩形的角轉換為位于設備像素的中心,這在補償坐標系已縮放時可用于補償渲染過掃描
func centerScanRect(NSRect) -> NSRect

修改坐標系

// 平移視圖的坐標系锌蓄,以便其原點移動到新位置
func translateOrigin(to: NSPoint)
// 縮放視圖的坐標系仰冠,以便單位正方形縮放到指定的尺寸
func scaleUnitSquare(to: NSSize)
// 將視圖的邊界矩形圍繞坐標系的原點(0.0洋只,0.0)旋轉指定的度值
func rotate(byDegrees: CGFloat)

檢查坐標系修改

// 指示視圖是否使用翻轉的坐標系
var isFlipped: Bool
// 指示視圖或其任何祖先是否曾經將旋轉因子應用于其框架或邊界
var isRotatedFromBase: Bool
// 指示視圖或其任何祖先是否曾經將旋轉因子應用于其框架或邊界识虚,或者是否已從窗口的基本坐標系縮放
var isRotatedOrScaledFromBase: Bool

調整子視圖的大小

// 指示當幀大小更改時妒茬,視圖是否將自動調整大小行為應用于其子視圖
var autoresizesSubviews: Bool
// 確定視圖如何相對于其父視圖調整大小的選項
var autoresizingMask: NSView.AutoresizingMask
// 通知視圖的子視圖該視圖的邊界矩形大小已更改
func resizeSubviews(withOldSize: NSSize)
// 通知視圖其父視圖的邊界大小已更改
func resize(withOldSuperviewSize: NSSize)

使用布局錨點創(chuàng)建約束

// 表示視圖框架底部邊緣的布局錨點
var bottomAnchor: NSLayoutYAxisAnchor
// 表示視圖框架水平中心的布局錨點
var centerXAnchor: NSLayoutXAxisAnchor
// 表示視圖框架垂直中心的布局錨點
var centerYAnchor: NSLayoutYAxisAnchor
// 布局錨担锤,表示視圖中最上方文本的基線
var firstBaselineAnchor: NSLayoutYAxisAnchor
// 表示視圖框架高度的布局錨點
var heightAnchor: NSLayoutDimension
// 布局錨,表示視圖中最底行的基線
var lastBaselineAnchor: NSLayoutYAxisAnchor
// 表示視圖框架前緣的布局錨點乍钻。
var leadingAnchor: NSLayoutXAxisAnchor
// 表示視圖框架左邊緣的布局錨點
var leftAnchor: NSLayoutXAxisAnchor
// 表示視圖框架右邊緣的布局錨點
var rightAnchor: NSLayoutXAxisAnchor
// 表示視圖框架頂部邊緣的布局錨點
var topAnchor: NSLayoutYAxisAnchor
// 表示視圖框架后沿的布局錨點
var trailingAnchor: NSLayoutXAxisAnchor
// 表示視圖框架寬度的布局錨點
var widthAnchor: NSLayoutDimension

約束

// 返回視圖持有的約束
var constraints: [NSLayoutConstraint]
// 在接收視圖或其子視圖的布局上添加約束
func addConstraint(NSLayoutConstraint)
// 在接收視圖或其子視圖的布局上添加多個約束
func addConstraints([NSLayoutConstraint])
// 從視圖中刪除指定的約束
func removeConstraint(NSLayoutConstraint)
// 從視圖中刪除指定的約束
func removeConstraints([NSLayoutConstraint])

使用布局指南

// 將提供的布局指南添加到視圖
func addLayoutGuide(NSLayoutGuide)
// 此視圖擁有的布局參考對象的數組
var layoutGuides: [NSLayoutGuide]
// 從視圖中刪除提供的布局指南
func removeLayoutGuide(NSLayoutGuide)

自動布局中的測量

// 滿足其約束的視圖的最小大小
var fittingSize: NSSize
// 接收視圖的自然大小肛循,僅考慮視圖本身的屬性
var intrinsicContentSize: NSSize
// 使視圖的固有內容大小無效
func invalidateIntrinsicContentSize()
// 返回優(yōu)先級,使視圖無法使其小于其固有大小
func contentCompressionResistancePriority(for: NSLayoutConstraint.Orientation) -> NSLayoutConstraint.Priority
// 設置視圖拒絕使其小于其固有大小的優(yōu)先級
func setContentCompressionResistancePriority(NSLayoutConstraint.Priority, for: NSLayoutConstraint.Orientation)
// 返回優(yōu)先級银择,使視圖無法使其大于其固有大小
func contentHuggingPriority(for: NSLayoutConstraint.Orientation) -> NSLayoutConstraint.Priority
// 設置優(yōu)先于使視圖大于其固有大小的優(yōu)先級
func setContentHuggingPriority(NSLayoutConstraint.Priority, for: NSLayoutConstraint.Orientation)

使視圖與自動布局對齊

// 返回給定框架的視圖對齊矩形
func alignmentRect(forFrame: NSRect) -> NSRect
// 返回給定對齊矩形的視圖框架
func frame(forAlignmentRect: NSRect) -> NSRect
// 視圖框架的插入點(以磅為單位),用于定義其內容矩
var alignmentRectInsets: NSEdgeInsets浩考。
// 視圖的對齊矩形的底部與其基線之間的距離(以磅為單位)
var baselineOffsetFromBottom: CGFloat
// 視圖的對齊矩形的頂部與其最高基線之間的距離(以磅為單位)
var firstBaselineOffsetFromTop: CGFloat
// 視圖的對齊矩形的底部與其最底端的基線之間的距離(以磅為單位)
var lastBaselineOffsetFromBottom: CGFloat

觸發(fā)自動布局

// 指示視圖在繪制之前是否需要布局傳遞
var needsLayout: Bool
// 與基于約束的布局系統(tǒng)一起執(zhí)行布局
func layout()
// 根據當前視圖和約束更新接收視圖及其子視圖的布局
func layoutSubtreeIfNeeded()
// 指示是否需要更新視圖的約束
var needsUpdateConstraints: Bool
// 更新視圖的約束
func updateConstraints()
// 更新接收視圖及其子視圖的約束
func updateConstraintsForSubtreeIfNeeded()

選擇加入自動版式

// 該值指示視圖是否依賴于基于約束的布局系統(tǒng)
class var requiresConstraintBasedLayout: Bool
// 指示是否將視圖的自動調整大小蒙版轉換為基于約束的布局系統(tǒng)的約束
var translatesAutoresizingMaskIntoConstraints: Bool

焦點

// 將焦點鎖定在視圖上夹孔,因此后續(xù)命令將在視圖的窗口和坐標系中生效
func lockFocus()
// 如果方法返回并返回的值,則將焦點自動鎖定到視圖
func lockFocusIfCanDraw() -> Bool
// 如果可以在指定的圖形上下文中進行繪制析孽,則將焦點自動鎖定在視圖上
func lockFocusIfCanDraw(in: NSGraphicsContext) -> Bool
// 從當前視圖解鎖焦點
func unlockFocus()
// 返回當前聚焦的NSView對象
class var focusView: NSView?

聚焦環(huán)圖

// 圍繞視圖繪制的聚焦環(huán)的類型
var focusRingType: NSFocusRingType
// 聚焦環(huán)蒙版邊界搭伤,在視圖的坐標空間中指定
var focusRingMaskBounds: NSRect
// 為視圖繪制聚焦環(huán)蒙版
func drawFocusRingMask()
// 調用以通知視圖聚焦環(huán)蒙版需要更新
func noteFocusRingMaskChanged()
// 使聚焦環(huán)周圍的區(qū)域無效
func setKeyboardFocusRingNeedsDisplay(NSRect)
// 返回默認的對焦環(huán)類型  
class var defaultFocusRingType: NSFocusRingType

獲取充滿活力的設置

// Query allowsVibrancy to see if the given appearance actually needs vibrant drawing. You may want to draw differently if the current apperance is vibrant.
var allowsVibrancy: Bool

全屏模式

// 將視圖設置為全屏模式
func enterFullScreenMode(NSScreen, withOptions: [NSView.FullScreenModeOptionKey : Any]?) -> Bool
// 指示視圖退出全屏模式
func exitFullScreenMode(options: [NSView.FullScreenModeOptionKey : Any]?)
// 視圖是否處于全屏模式
var isInFullScreenMode: Bool

隱藏視圖

// 指示視圖是否隱藏
var isHidden: Bool
// 指示該視圖或它的祖先之一是否被視線隱藏了,被標記為隱藏
var isHiddenOrHasHiddenAncestor: Bool
// 視圖被隱藏時直接調用袜瞬,或者響應于祖先被隱藏而調用
func viewDidHide()
// 視圖被取消隱藏時直接調用怜俐,或響應于取消隱藏祖先而調用
func viewDidUnhide()

管理實時調整大小

// 指示是否將視圖作為實時調整大小操作的一部分進行渲染
var inLiveResize: Bool
// 指示視圖是否通過保留未移動的內容來優(yōu)化實時調整大小的操作
var preservesContentDuringLiveResize: Bool
// 返回指示視圖新暴露區(qū)域的矩形列表
func getRectsExposedDuringLiveResize(UnsafeMutablePointer, count: UnsafeMutablePointer)
// 矩形,用于標識視圖的實時調整大小操作期間未更改的部分
var rectPreservedDuringLiveResize: NSRect
// 通知視圖實時調整大小的開始-用戶已開始調整視圖的大小
func viewWillStartLiveResize()
// 通知視圖實時調整大小結束-用戶已完成視圖大小的調整
func viewDidEndLiveResize()

管理手勢識別器

// 識別當前附加到視圖的手勢對象
var gestureRecognizers: [NSGestureRecognizer]
// 將手勢識別器附加到視圖
func addGestureRecognizer(NSGestureRecognizer)
// 從視圖中分離手勢識別器
func removeGestureRecognizer(NSGestureRecognizer)

事件處理

// 類重寫mouseDown(:)返回true邓尤,如果不是拍鲤,則為false
func acceptsFirstMouse(for: NSEvent?) -> Bool
// 返回包含指定點的視圖層次結構中視圖的最遠后代(包括自身),或者返回`nil`該點是否完全位于視圖外部裁赠。
func hitTest(NSPoint) -> NSView?
// 返回視圖的區(qū)域是否包含指定點殿漠,說明視圖是否翻轉
func isMousePoint(NSPoint, in: NSRect) -> Bool
// 由子類實現(xiàn)以響應等效的鍵(也稱為鍵盤快捷鍵)
func performKeyEquivalent(with: NSEvent) -> Bool
// 指示視圖是否可以將鼠標按下事件傳遞給其超級視圖
var mouseDownCanMoveWindow: Bool
// 視圖的文本輸入上下文對象
var inputContext: NSTextInputContext?

觸摸事件處理

// 視圖是否接受觸摸事件。默認為false
var acceptsTouchEvents: Bool

Key View

// 指示視圖是否可以成為關鍵視圖
var canBecomeKeyView: Bool
// 指示視圖在處理鍵盤輸入和導航之前是否需要其面板成為鍵窗口
var needsPanelToBecomeKey: Bool
// 關鍵視圖循環(huán)中當前視圖之后的視圖對象
var nextKeyView: NSView?
// 關鍵視圖循環(huán)中最接近的視圖對象佩捞,該對象緊隨關鍵視圖循環(huán)中的當前視圖并接受第一響應者狀態(tài)
var nextValidKeyView: NSView?
// 關鍵視圖循環(huán)中當前視圖之前的視圖對象
var previousKeyView: NSView?
// 關鍵視圖循環(huán)中最接近的視圖對象,該對象位于當前視圖之前并接受第一響應者狀態(tài)
var previousValidKeyView: NSView?

Scrolling

// 準備用于繪制的透支區(qū)域
func prepareContent(in: NSRect)
// 視圖的已渲染部分蕾哟,可用于響應滾動
var preparedContentRect: NSRect
// 滾動視圖的最接近的祖先對象一忱,以使視圖中的點位于剪輯視圖的邊界矩形的原點
func scroll(NSPoint)
// 滾動視圖的最接近的祖先對象所需的最小距離莲蜘,以使視圖的指定區(qū)域在剪輯視圖中可見
func scrollToVisible(NSRect) -> Bool
// 按與視圖外部最近的事件的距離成比例地滾動視圖的祖先對象
func autoscroll(with: NSEvent) -> Bool
// 被子類重寫以修改給定的矩形,并返回更改后的矩形
func adjustScroll(NSRect) -> NSRect
// 包含當前視圖的最接近的祖先滾動視圖
var enclosingScrollView: NSScrollView?
// 通知剪輯視圖的超級視圖剪輯視圖需要重置其邊界矩形的原點
func scroll(NSClipView, to: NSPoint)
// 通知剪輯視圖的超級視圖剪輯視圖的邊界矩形或文檔視圖的框架矩形已更改帘营,并且滾動位置的任何指示符都需要調整
func reflectScrolledClipView(NSClipView)

拖動操作

// 注冊視圖將接受的粘貼板類型作為圖像拖動會話的目標
func registerForDraggedTypes([NSPasteboard.PasteboardType])
// 在拖動會話中將視圖注銷為可能的目標
func unregisterDraggedTypes()
// 視圖可以接受的粘貼板拖動類型的數組
var registeredDraggedTypes: [NSPasteboard.PasteboardType]
// 使用一組拖動項啟動拖動會話
func beginDraggingSession(with: [NSDraggingItem], event: NSEvent, source: NSDraggingSource) -> NSDraggingSession
// 從視圖啟動拖動操作票渠,從而允許用戶將文件圖標拖動到具有窗口或查看接受文件的對象的任何應用程序
func dragFile(String, from: NSRect, slideBack: Bool, event: NSEvent) -> Bool
// 從視圖啟動拖動操作,從而允許用戶將一個或多個承諾文件(或目錄)拖動到任何具有接受承諾文件數據的窗口或視圖對象的應用程序中
func dragPromisedFiles(ofTypes: [String], from: NSRect, source: Any, slideBack: Bool, event: NSEvent) -> Bool
// 允許用戶在不激活應用程序或不向前移動視圖窗口的情況下從視圖中拖動對象芬迄,從而可能使目標模糊
func shouldDelayWindowOrdering(for: NSEvent) -> Bool

處理智能放大倍數

// 返回在指定點周圍放大時要使用的適當矩形
func rectForSmartMagnification(at: NSPoint, in: NSRect) -> NSRect

控制通知

// 指示視圖的框架矩形更改時是否發(fā)布通知
var postsFrameChangedNotifications: Bool
// 指示視圖的邊界矩形更改時是否發(fā)布通知
var postsBoundsChangedNotifications: Bool

響應后備存儲庫屬性的更改

// 視圖的后備存儲庫屬性更改時響應
func viewDidChangeBackingProperties()

標簽

// 返回帶有特定標簽或`nil`沒有子視圖具有該標簽的視圖的最接近后代(包括其自身)
func viewWithTag(Int) -> NSView?
// 視圖的標記问顷,它是一個整數,用于在應用程序中標識視圖
var tag: Int

工具提示

// 為視圖的已定義區(qū)域創(chuàng)建工具提示禀梳,并返回標識工具提示矩形的標簽
func addToolTip(NSRect, owner: Any, userData: UnsafeMutableRawPointer?) -> NSView.ToolTipTag
// 刪除分配給視圖的所有工具提示
func removeAllToolTips()
// 刪除由指定標簽標識的工具提示
func removeToolTip(NSView.ToolTipTag)
// 視圖工具提示的文本
var toolTip: String?

管理跟蹤矩形

// 在視圖中建立一個用于跟蹤鼠標輸入和鼠標退出事件的區(qū)域杜窄,并返回一個標識跟蹤矩形的標記
func addTrackingRect(NSRect, owner: Any, userData: UnsafeMutableRawPointer?, assumeInside: Bool) -> NSView.TrackingRectTag
// 刪除標記標識的跟蹤矩形
func removeTrackingRect(NSView.TrackingRectTag)

管理跟蹤區(qū)域

// 將給定的跟蹤區(qū)域添加到視圖中
func addTrackingArea(NSTrackingArea)
// 從視圖中刪除給定的跟蹤區(qū)域
func removeTrackingArea(NSTrackingArea)
// 視圖的跟蹤區(qū)域的數組
var trackingAreas: [NSTrackingArea]
// 視圖的幾何形狀發(fā)生變化時自動調用,從而需要重新計算其跟蹤區(qū)域
func updateTrackingAreas()

管理光標跟蹤

// 建立當鼠標指針位于指定區(qū)域內時要使用的光標
func addCursorRect(NSRect, cursor: NSCursor)
// 從視圖中完全刪除光標矩形
func removeCursorRect(NSRect, cursor: NSCursor)
// 使使用設置的所有光標矩形無效
func discardCursorRects()
// 子類重寫以定義其默認光標矩形
func resetCursorRects()

管理上下文菜單

// 子類重寫算途,以為給定的鼠標按下事件返回上下文相關的彈出菜單
func menu(for: NSEvent) -> NSMenu?
// 被子類重寫塞耕,以為接收類的實例返回默認的彈出菜單
class var defaultMenu: NSMenu?
// 在屏幕上打開視圖的上下文菜單之前調用
func willOpenMenu(NSMenu, with: NSEvent)
// 從接收視圖顯示的上下文菜單關閉后調用
func didCloseMenu(NSMenu, with: NSEvent?)

編寫符合標準的渲染說明

// 在打印會話開始時調用此方法,以設置當前圖形上下文
func beginDocument()
// 在打印會話結束時調用此方法
func endDocument()
// 寫入符合要求的頁面的結尾
func endPage()

顯示定義窗口

// 顯示一個窗口嘴瓤,該窗口在指定點顯示屬性字符串的定義
func showDefinition(for: NSAttributedString?, at: NSPoint)
// 顯示一個窗口扫外,該窗口顯示屬性字符串的指定范圍的定義
func showDefinition(for: NSAttributedString?, range: NSRange, options: [NSView.DefinitionOptionKey : Any]?, baselineOriginProvider: ((NSRange) -> NSPoint)?)
// 要包含在定義中的鍵
struct NSView.DefinitionOptionKey
// 窗口的演示選項
struct NSView.DefinitionPresentationType

圖紙查找指示器

// 指示是否正在為查找指示器繪制視圖或其祖先之一
var isDrawingFindIndicator: Bool

管理內容布局方向

// 視圖中內容的布局方向
var userInterfaceLayoutDirection: NSUserInterfaceLayoutDirection

配置壓力

// 在光標位于視圖上方時響應用戶產生的觸摸輸入時,配置Force Touch觸控板的行為和進度
var pressureConfiguration: NSPressureConfiguration?

通知事項

// 當視圖的bounds矩形獨立于框架矩形而更改為新值時(但僅當視圖的屬性為時)才發(fā)布
class let boundsDidChangeNotification: NSNotification.Name
// 當視圖的框架矩形更改為新值時才發(fā)布廓脆,但僅當視圖的屬性為時才發(fā)布筛谚。
class let frameDidChangeNotification: NSNotification.Name
// 當視圖重新計算其跟蹤區(qū)域時發(fā)布。
class let didUpdateTrackingAreasNotification: NSNotification.Name

實例屬性

var allowedTouchTypes: NSTouch.TouchTypeMask
var candidateListTouchBarItem: NSCandidateListTouchBarItem?
var isHorizontalContentSizeConstraintActive: Bool
var isVerticalContentSizeConstraintActive: Bool
var playgroundLiveViewRepresentation: PlaygroundLiveViewRepresentation

實例方法

// 通知客戶端停忿,aRulerView允許用戶添加aMarker
func rulerView(NSRulerView, didAdd: NSRulerMarker)
// 通知客戶端刻获,aRulerView允許用戶移動aMarker。
func rulerView(NSRulerView, didMove: NSRulerMarker)
// 通知客戶端瞎嬉,aRulerView允許用戶移除aMarker蝎毡。
func rulerView(NSRulerView, didRemove: NSRulerMarker)
// 當光標位于aRulerView的標尺區(qū)域時,通知客戶端用戶已按下鼠標按鈕氧枣。
func rulerView(NSRulerView, handleMouseDownWith: NSEvent)
func rulerView(NSRulerView, locationFor: NSPoint) -> CGFloat
func rulerView(NSRulerView, pointForLocation: CGFloat) -> NSPoint
// 請求aRulerView添加aMarker(一個被用戶拖到標尺上的NSRulerMarker)的權限沐兵。
func rulerView(NSRulerView, shouldAdd: NSRulerMarker) -> Bool
// 請求允許aRulerView移動aMarker。
func rulerView(NSRulerView, shouldMove: NSRulerMarker) -> Bool
// 請求aRulerView刪除aMarker的權限便监。
func rulerView(NSRulerView, shouldRemove: NSRulerMarker) -> Bool
// 通知客戶端aRulerView將添加新的NSRulerMarker, aMarker扎谎。
func rulerView(NSRulerView, willAdd: NSRulerMarker, atLocation: CGFloat) -> CGFloat
// 通知客戶端aRulerView將移動aMarker,一個已經在標尺視圖上的NSRulerMarker烧董。
func rulerView(NSRulerView, willMove: NSRulerMarker, toLocation: CGFloat) -> CGFloat
// 通知客戶端視圖將被采納
func rulerView(NSRulerView, willSetClientView: NSView)
func viewDidChangeEffectiveAppearance()
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末毁靶,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子逊移,更是在濱河造成了極大的恐慌预吆,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胳泉,死亡現(xiàn)場離奇詭異拐叉,居然都是意外死亡岩遗,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門凤瘦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宿礁,“玉大人,你說我怎么就攤上這事蔬芥“鹁福” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵笔诵,是天一觀的道長返吻。 經常有香客問我,道長嗤放,這世上最難降的妖魔是什么思喊? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮次酌,結果婚禮上恨课,老公的妹妹穿的比我還像新娘。我一直安慰自己岳服,他們只是感情好剂公,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著吊宋,像睡著了一般纲辽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上璃搜,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天拖吼,我揣著相機與錄音,去河邊找鬼这吻。 笑死吊档,一個胖子當著我的面吹牛,可吹牛的內容都是我干的唾糯。 我是一名探鬼主播怠硼,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼移怯!你這毒婦竟也來了香璃?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤舟误,失蹤者是張志新(化名)和其女友劉穎葡秒,沒想到半個月后,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡同云,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年糖权,在試婚紗的時候發(fā)現(xiàn)自己被綠了堵腹。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片炸站。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖疚顷,靈堂內的尸體忽然破棺而出旱易,到底是詐尸還是另有隱情,我是刑警寧澤腿堤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布阀坏,位于F島的核電站,受9級特大地震影響笆檀,放射性物質發(fā)生泄漏忌堂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一酗洒、第九天 我趴在偏房一處隱蔽的房頂上張望士修。 院中可真熱鬧,春花似錦樱衷、人聲如沸棋嘲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沸移。三九已至,卻和暖如春侄榴,著一層夾襖步出監(jiān)牢的瞬間雹锣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工癞蚕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蕊爵,地道東北人。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓涣达,卻偏偏與公主長得像在辆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子度苔,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內容