首页
学习
活动
专区
工具
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本质

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

1.1K40

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

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

7.8K20
  • 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.8K10

    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 是对象的实际内容的宽,不包边线宽度

    7.5K20

    再谈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.5K20

    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.6K10

    macOS AppKit 的事件响应简介

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

    2.7K60

    Android的FixScrollView自定义控件

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

    1.9K80

    【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 坐标是 相对于本组件的坐标

    4K10

    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.5K20

    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

    6.1K20

    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

    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() :若返回的不是浏览器窗口的高度,可能是网页没有加上 声明。

    3.1K00

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

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

    2.2K30

    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.4K40
    领券