首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当父不是窗口时,有没有办法获得相对于最内层NSView的坐标?

当父不是窗口时,可以通过以下方式获得相对于最内层 NSView 的坐标:

  1. 获取当前视图的父视图:
代码语言:swift
复制
let superview = view.superview
  1. 获取父视图的子视图中当前视图的索引:
代码语言:swift
复制
let index = superview.subviews.firstIndex(of: view)
  1. 获取父视图的子视图中当前视图的坐标:
代码语言:swift
复制
let frame = view.frame
let origin = frame.origin
  1. 如果父视图的子视图中还有其他视图,则需要递归计算父视图的坐标:
代码语言:swift
复制
func getSuperviewOrigin(_ view: NSView) -> CGPoint {
    let superview = view.superview
    let index = superview.subviews.firstIndex(of: view)
    let frame = view.frame
    let origin = frame.origin
    if let superview = superview.superview {
        let superOrigin = getSuperviewOrigin(superview)
        return CGPoint(x: origin.x + superOrigin.x, y: origin.y + superOrigin.y)
    } else {
        return origin
    }
}

这样就可以获得当前视图相对于最内层 NSView 的坐标。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

macOS 开发基础教程视频 - 理解bounds本质

关于视图NSViewframe和bounds概念,我们就不再介绍了,(课程视频中有图例讲解,网上也有相关资料),这里只重点突出视频教程中阐述两个点: frame : 相对控件坐标系统描述...bounds:相对NSView自身坐标系统描述 上面这两点如果从字面的含义理解起来可能会觉得有些抽象,为了便于具体说明,我们打个比方,将frame想象成为一个相框,它作用仅仅是告诉控件自己需要占据位置和尺寸...控件,我需要在你坐标系统中占据这个frame.origin位置,尺寸是frame.size区域),这样以来,控件在布局时候,就会知道如何摆放它内部所有控件了。...可是一旦遮盖起来,你发现自己都无法观看了,这时候你想到了一个聪明办法:在遮盖上开启一个矩形窗口,透过这个窗口,就可以看到遮盖下面的壁画(NSView)了,如你所料:这个矩形窗口,就是bounds...如果bounds比较小(就像你在遮盖上开了一个小小窗口),可以通过移动bounds位置,来展示NSView各个区域内容。

1K40

scrollwidth和clientwidth_vue监听页面滚动

scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容最左端之间距离 scrollTop:设置或获取位于对象顶端和窗口中可见内容顶端之间距离 scrollWidth:获取对象滚动宽度...offsetHeight:获取对象相对于版面或由坐标 offsetParent 属性指定坐标的高度 offsetLeft:获取对象相对于版面或由 offsetParent 属性指定坐标的计算左侧位置...obj.offsetTop 指 obj 相对于版面或由 offsetParent 属性指定坐标的计算上侧位置,整型,单位像素。...LEFT: 为从左向右移位置,即挂件距离屏幕左边缘距离; clientLeft 返回对象offsetLeft属性值和到当前窗口左边真实值之间距离 offsetLeft 返回对象相对于级对象布局或坐标的...left值,就是以级对象左上角为坐标原点,向右和向下为X、Y轴正方向x坐标 pixelLeft 设置或返回对象相对于窗口左边位置 scrollWidth 是对象实际内容宽,不包边线宽度

1.7K10

html中offsetTop、clientTop、scrollTop、offsetTop各属性介绍(转)

scrollTop:设置或获取位于对象顶端和窗口中可见内容顶端之间距离 scrollWidth:获取对象滚动宽度 offsetHeight:获取对象相对与版面或由坐标offsetParent...属性指定坐标的高度 offsetLeft:获取对象相对于版面或由offsetParent属性指定坐标的计算左侧位置 offsetTop:获取对象相对于版面或由offsetTop属性指定坐标的计算顶端位置...重视.若是对象是包含在一个DIV中,此DIV不会被当做是此对象上级层,(即对象上级层会跳过DIV对象)上级层是Table则不会有题目....哄骗这个属性,可以获得当前对象在不合大小页面中绝对地位....便是在呈现了横向迁移转变条景象下,迁移转变条拉动间隔. 7.scrollTop 对象顶部到对象在当前窗口显示局限内顶边间隔. 便是在呈现了纵向迁移转变条景象下,迁移转变条拉动间隔.

7.6K20

JS 获取浏览器窗口大小clientWidth、offsetWidth、scrollWidth「建议收藏」

scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容最左端之间距离 scrollTop:设置或获取位于对象顶端和窗口中可见内容顶端之间距离 scrollWidth:获取对象滚动宽度...offsetHeight:获取对象相对于版面或由坐标 offsetParent 属性指定坐标的高度 offsetLeft:获取对象相对于版面或由 offsetParent 属性指定坐标的计算左侧位置...obj.offsetTop 指 obj 相对于版面或由 offsetParent 属性指定坐标的计算上侧位置,整型,单位像素。...LEFT: 为从左向右移位置,即挂件距离屏幕左边缘距离; clientLeft 返回对象offsetLeft属性值和到当前窗口左边真实值之间距离 offsetLeft 返回对象相对于级对象布局或坐标的...left值,就是以级对象左上角为坐标原点,向右和向下为X、Y轴正方向x坐标 pixelLeft 设置或返回对象相对于窗口左边位置 scrollWidth 是对象实际内容宽,不包边线宽度

6.7K20

再谈BOM和DOM(6):dom对象及event对象位值计算—如offsetXTop,clentX

event对象位置信息获取 先总结下区别: event.clientX、event.clientY 鼠标相对于浏览器窗口可视区域X,Y坐标窗口坐标),可视区域不包括工具栏和滚动条。.../relative),offsetParent取级中最近元素     obj.offsetLeft   //合并后高度 ,元素相对于元素获整个版面,由offsetParent 属性指定坐标的计算上侧位置...获取对象滚动高度     scrollLeft 已滚动过去宽度 设置或获取位于对象左边界和窗口中目前可见内容最左端之间距离     scrollTop  设置或获取位于对象顶端和窗口中可见内容顶端之间距离...js中getBoundingClientRect 滚动位置发生了改变,top和left属性值就会随之立即发生变化(因此,它们值是相对于视口,而不是绝对)。...如果你需要获得相对于整个网页左上角定位属性值,那么只要给top、left属性值加上当前滚动位置(通过window.scrollX和window.scrollY),这样就可以获取与当前滚动位置无关

1.4K20

Hands On GUI Application Development in Go

,并自主产生消息;消息产生,对应响应函数会被调用 图形绘制包括: 基本点线绘制,例如:画点,矩形,横线,竖线等 设置绘制图层,如果需要多个图层,在基本点线绘制,需要给出图层索引值 图层处理,...parent:窗口;resour_id:窗口ID;str:自己窗口标题字符串;x:自己相对窗口坐标x;y:自己相对窗口坐标y;width:窗口宽度;height:窗口高度;p_child_tree...attr:属性值 is_focus_wnd 判断自己(this)是否可以获得焦点 set_wnd_pos 设置自己(this)相对于窗口窗口位置。...x:窗口左上角坐标x;y:窗口左上角坐标y;width:窗口宽度;height:窗口高度 get_wnd_rect 获取自己(this)相对于窗口位置信息。...notify_parent 传递UI消息给自己(this)窗口,并调用窗口对应响应函数。

1.1K10

Qt 常用类 (9)—— QWidget

顶级窗口一定是独立窗口,但独立窗口不一定是顶级,它可以有窗口窗口被析构它也会随之被析构。独立窗口一般有自己外边框和标题栏,可以有移动、改变大小等操作。        ...注意这里坐标都是相对于窗口,因此移动一个窗口并不导致它所有部件都接收到移动事件。...还有一个属性比较特殊,相关成员函数如下: [plain] view plaincopy QRect rect() const;     // 获取窗口区域          它获得坐标都是相对于窗口自己客户区...事件;窗口隐藏,将发送 QHideEvent 事件。...窗口获得或失去焦点,将发送 QFocusEvent 事件,它有两个处理函数:forceInEvent 和 focusOutEvent,分别对应获得焦点和失去焦点。

3.5K10

macOS AppKit 事件响应简介

,告知其已经添加了一个事件到队列中待处理. 5.macOS窗口服务收到驱动程序消息后,会寻找对应进程(也就是应用程序). 6.窗口服务找到App 进程后,会将事件派发到这个应用进程runloop...是通过调用NSViewhitTest:方法,根据这个方法返回值(通常是显示在顶层View)来确定....item)或者某个NSObject 控件对象 ,按下这个(或这组)键,就相当于选中了菜单栏或者点击了控件对象....Defaults and Key Bindings](Text System Defaults and Key Bindings)绑定到某个具体物理按键上,这个按钮被按下,执行特定方法,比如 pageDown...在应用程序处理键盘事件,如果这个事件不是快捷键(Key equivalents)或者控制键Keyboard interface control,那么应用程序会将事件通过sendEvent:方法发送给kew

2.6K60

AndroidFixScrollView自定义控件

-20170331111723820-1491053367.gif 基本思路:是外层有个ScrollView,子tab页面中有ListView(React-native原生实现也是ScrollView...ViewGroup是否拦截事件,是通过onTnterceptTouchEvent返回值来确定,返回true,表示拦截该事件,那么该系列事件全部传递给ViewGrouponTouchEvent,如果返回...一开始思路是切换tab页面的话其他tab页面Listview控件可见状态会不可见或者消失,完全不是这么回事,后来发现其实View视图状态一直是可见,不过那时候技术老大提醒说点击不同tablistview...但是都不是整个屏幕中坐标。...那么有没有其他方法了呢?采用Hierarchy Viewer去寻找不同tab页面的listview不同点,上个两个tab布局树形图。

1.8K80

【Android 应用开发】Android 组件 位置坐标 属性 ( 组件位置属性 | 容器坐标坐标 | 窗口坐标坐标 | 屏幕坐标坐标 | 触摸坐标 )

View 坐标体系总结 ---- left , top , right , bottom 是组件相对于容器位置 , 该值一般不会改变 ; x , y 是组件当前相对于容器位置 ; translationX..., translationY 分别是相对于 left , top 值偏移大小 ; left + translationX = x , top + translationY = y ; 窗口坐标获取...相对容器位置 : 这里特别注意 , left , top , right , bottom 属性 , 是 相对于容器位置 , 不是 相对于 Activity 界面位置 , 也不是 相对于屏幕位置...获取 View 组件窗口坐标 : 这里窗口指的是 Activity 窗口 ; ① 所在坐标系 : 坐标原点 (0 ,0) 是 Activity 窗口左上角位置 ; ② 区分屏幕坐标 : Activity...View 组件触摸位置 属性 ---- View 组件触摸事件位置属性 : ① x , y 相对于组件坐标 : 触摸组件 , 从 MotionEvent 事件中获取 x , y 坐标相对于本组件坐标

3.9K10

Window对象

pageXOffset: 设置或返回当前页面相对于窗口显示区左上角X位置。 pageYOffset: 设置或返回当前页面相对于窗口显示区左上角Y位置。...parent: 返回当前窗口窗口对象,如果没有窗口,则返回自身引用。 performance: 允许网页访问某些函数来测量网页和Web应用程序性能。...screenLeft: 返回相对于屏幕窗口X坐标 screenTop: 返回相对于屏幕窗口Y坐标 screenX: 返回相对于屏幕窗口X坐标 screenY: 返回相对于屏幕窗口Y坐标 sessionStorage...self: 返回对当前窗口引用。 status: 设置窗口状态栏文本。 top: 返回窗口层级顶层窗口引用。...onfocus: 窗口获得焦点触发。 onresize: 窗口大小发生改变触发。 onscroll: 窗口发生滚动触发。 onmessage: 窗口对象接收消息事件触发。

2.4K20

Js窗体window大小设置(转)

scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容最左端之间距离  scrollTop:设置或获取位于对象顶端和窗口中可见内容顶端之间距离  scrollWidth:获取对象滚动宽度...  offsetHeight:获取对象相对于版面或由坐标 offsetParent 属性指定坐标的高度  offsetLeft:获取对象相对于版面或由 offsetParent 属性指定坐标的计算左侧位置...  offsetTop:获取对象相对于版面或由 offsetTop 属性指定坐标的计算顶端位置  event.clientX 相对文档水平座标  event.clientY 相对文档垂直座标 ...event.offsetX 相对容器水平坐标  event.offsetY 相对容器垂直坐标  document.documentElement.scrollTop 垂直方向滚动值  event.clientX...,否则窗口会从顶端开始最大化                                                       w.setPosition(document.body.scrollLeft

6K20

HTML DOM Event 对象

onclick 当用户点击某个对象时调用事件句柄。 ondblclick 当用户双击某个对象时调用事件句柄。 onerror 在加载文档或图像发生错误。 onfocus 元素获得焦点。...clientX 返回当事件被触发,鼠标指针水平坐标。 clientY 返回当事件被触发,鼠标指针垂直坐标。 ctrlKey 返回当事件被触发,"CTRL" 键是否被按下。...metaKey 返回当事件被触发,"meta" 键是否被按下。 relatedTarget 返回与事件目标节点相关节点。 screenX 返回某个事件被触发,鼠标指针水平坐标。...screenY 返回某个事件被触发,鼠标指针垂直坐标。 shiftKey 返回当事件被触发,"SHIFT" 键是否被按下。...x,y 事件发生位置 x 坐标和 y 坐标,它们相对于用CSS动态定位内层包容元素。 标准 Event 属性 下面列出了 2 级 DOM 事件标准定义属性。

1.3K20

屏幕坐标与客户坐标的区别

屏幕坐标相对于屏幕左上角(0,0)位置坐标,客户坐标相对于某个窗口客户区左上角坐标谈到客户坐标需要说明是相对哪个窗口客户坐标。 ?...如上图,点A(屏幕左上角),点B(应用主窗口客户区左上角),控件1C点屏幕坐标和客户坐标是不同,屏幕坐标相对于A点坐标(50,100),客户坐标相对于窗口)是相对于B点坐标(20,50)。...(子控件)相对于窗口客户坐标。...第二,调ScreenToClient()指定窗口句柄,获取控件1在窗口客户坐标。...笔者开发过程中误以为GetWindowRect()返回坐标窗口类型有关,如果窗口是子窗口(控件)是客户坐标,缺少调用ScreenToClient()接口,导致位置不对。

2K30

JavaScript与jQuery获取元素宽、高和位置

getBoundingClientRect() :获取元素相对于浏览器视口坐标,返回一个Object对象,有6个属性:top | left | right | bottom | width | height...元素位置偏移量 offset() :返回包含 top 和 left 两个属性对象,相对于 document 文档坐标。...浏览器相关宽高 $(window).height() :获取浏览器可视窗口高度; $(document).height() :获取整个网页文档高度;网页高度不足浏览器窗口,返回是 $(window...即:网页滚动条拉到最低端: $(document).height() == $(window).height() + $(window).scrollTop() 注意:不建议使用 $("html")...$(window).height() :若返回不是浏览器窗口高度,可能是网页没有加上 声明。

2.9K00

javascript中各种计算位置高度方法

scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容最左端之间距离 scrollTop:设置或获取位于对象顶端和窗口中可见内容顶端之间距离 scrollWidth:获取对象滚动宽度...offsetHeight:获取对象相对于版面或由坐标 offsetParent 属性指定坐标的高度 offsetLeft:获取对象相对于版面或由 offsetParent 属性指定坐标的计算左侧位置...offsetTop:获取对象相对于版面或由 offsetTop 属性指定坐标的计算顶端位置 event.clientX 相对文档水平座标 event.clientY 相对文档垂直座标...event.offsetX 相对容器水平坐标 event.offsetY 相对容器垂直坐标 document.documentElement.scrollTop 垂直方向滚动值...; 而不是: document.body.scrollTop; documentElement 对应是 html 标签,而 body 对应是 body 标签

1.6K20

vue里监听页面滚动问题

scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容最左端之间距离 scrollTop:设置或获取位于对象顶端和窗口中可见内容顶端之间距离 scrollWidth:获取对象滚动宽度...offsetHeight:获取对象相对于版面或由坐标 offsetParent 属性指定坐标的高度 offsetLeft:获取对象相对于版面或由 offsetParent 属性指定坐标的计算左侧位置...offsetTop:获取对象相对于版面或由 offsetTop 属性指定坐标的计算顶端位置 event.clientX 相对文档水平座标 event.clientY 相对文档垂直座标 event.offsetX...相对容器水平坐标 event.offsetY 相对容器垂直坐标 document.documentElement.scrollTop 垂直方向滚动值 event.clientX+document.documentElement.scrollTop...相对文档水平座标+垂直方向滚动量 要获取当前页面的滚动条纵坐标位置,用: document.documentElement.scrollTop; 而不是: document.body.scrollTop

3.3K40

DOM 和 BOM 中各种宽高属性

注意:IE 和 Opera 下表示窗口文档区到屏幕距离,这意味着窗口最大化时,screenTop 返回窗口顶部栏高度而不是 0。...对于一个 dom 元素,它 getBoundingClientRect() 方法返回是该元素对应矩形对象,通过 top,bottom,left,right 可以分别获得该对象各边相对于窗口上边或者左边距离...ev.clientX/ev.clientY: 事件发生,鼠标点击位置相对于浏览器可视区(不包括滚动条和工具栏)左上角(该点为原点)坐标。...ev.screenX/ev.screenY: 事件发生,鼠标点击位置相对于设备屏幕左上角(该点为原点)坐标 ev.offsetX/ev.offsetY: 事件发生,鼠标点击位置相对于事件源左上角(...ev.pageX/ev.pageY 事件发生,鼠标点击位置相对于页面左上角(该点为原点)坐标

1.9K10
领券