CN111158820B - 控件点击事件处理方法、装置、电子设备及存储介质 - Google Patents
控件点击事件处理方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN111158820B CN111158820B CN201911355451.6A CN201911355451A CN111158820B CN 111158820 B CN111158820 B CN 111158820B CN 201911355451 A CN201911355451 A CN 201911355451A CN 111158820 B CN111158820 B CN 111158820B
- Authority
- CN
- China
- Prior art keywords
- control
- click event
- position information
- class
- click
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/451—Execution arrangements for user interfaces
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
Abstract
本申请公开了一种控件点击事件处理方法、装置、电子设备及存储介质,以简单高效地实现获取点击位置的功能,所述方法包括:获取页面显示文件,页面显示文件包括至少一个展示控件,每个展示控件内包括至少一个子控件;在显示至少一个展示控件之前,生成每一子控件所属的类对应的子类,并在每一子类中增加点击事件拦截方法;响应针对显示的任一子控件的点击事件,通过被点击的子控件的子类中的点击事件拦截方法拦截点击事件;将点击事件对应的第一位置信息转换为相对于被点击的子控件所属的展示控件的第二位置信息;将第二位置信息确定为针对被点击子控件所属的展示控件的点击位置,发送给后台服务器;将点击事件透传给被点击的子控件所属的类。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种控件点击事件处理方法、装置、电子设备及存储介质。
背景技术
本部分旨在为权利要求书中陈述的本申请的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。
应用中展示的所有内容都是由一个个控件所构成的,以图1为例,当同时在页面中展示多篇新闻时,每一篇新闻可由一个标题控件、一个简介控件和图片控件构成,这几个控件就构成了该新闻对应的展示控件。现有技术中,当用户点击了终端设备屏幕上显示的一个展示控件时,可通过修改原有的控件或视图层级结构,或在原有视图层级结构中新增控件的方式,来获取点击位置相对于展示控件的坐标位置。但是,由于不同种类的控件的内部实现方式完全不同,且不同展示控件中控件的视图层级结构也不同,因此,为了获取不同展示控件中点击事件的坐标,需要对不同种类的控件进行单独修改,操作繁琐,实现成本高。
发明内容
针对上述技术问题,非常需要一种改进的方法,以简单高效地实现获取点击位置的功能。
一方面,本申请一实施例提供了一种控件点击事件处理方法,包括:
获取页面显示文件,所述页面显示文件包括至少一个展示控件,每个展示控件内包括至少一个子控件;
在显示所述至少一个展示控件之前,生成每一子控件所属的类对应的子类,并在每一子类中增加点击事件拦截方法,所述子类拥有其对应的类所具有的属性;
响应针对显示的任一子控件的点击事件,通过被点击的子控件的子类中的点击事件拦截方法拦截所述点击事件;
将所述点击事件对应的第一位置信息转换为相对于所述被点击的子控件所属的展示控件的第二位置信息,所述第一位置信息为点击动作在所述被点击的子控件中的位置信息;
将所述第二位置信息确定为针对所述被点击子控件所属的展示控件的点击位置,发送给后台服务器;
将所述点击事件透传给所述被点击的子控件所属的类,以通过所述被点击的子控件所属的类中的方法处理所述点击事件。
可选地,所述页面显示文件还包括针对每个展示控件的配置信息,所述配置信息用于表征是否需要获取展示控件的点击位置;
所述生成每一子控件所属的类对应的子类,具体包括:
针对每一需要获取点击位置的展示控件,生成该展示控件中每一子控件所属的类对应的子类。
可选地,所述在每一子类中增加点击事件拦截方法,具体包括:
通过系统函数class_addMethod在每一子类中增加点击事件拦截方法。
可选地,所述将所述点击事件对应的第一位置信息转换为相对于所述被点击的子控件所属的展示控件的第二位置信息,具体包括:
获取所述被点击的子控件所属的展示控件的视图层级结构,所述视图层级结构包括:每个子控件在其所属的展示控件内的位置信息;
根据所述视图层级结构,将所述第一位置信息转换为相对于所述被点击的子控件所属的展示控件的第二位置信息。
可选地,所述将所述点击事件透传给所述被点击的子控件所属的类,具体包括:
通过系统函数objc_msgSendSuper将所述点击事件透传给所述被点击的子控件所属的类。
可选地,所述点击事件包括开始点击事件和结束点击事件。
可选地,所述方法还包括:
通过系统函数获取所述点击事件对应的第一位置信息。
一方面,本申请一实施例提供了一种控件点击事件处理装置,包括:
获取模块,用于获取页面显示文件,所述页面显示文件包括至少一个展示控件,每个展示控件内包括至少一个子控件;
子类生成模块,用于在显示所述至少一个展示控件之前,生成每一子控件所属的类对应的子类,并在每一子类中增加点击事件拦截方法,所述子类拥有其对应的类所具有的属性;
点击事件拦截模块,用于响应针对显示的任一子控件的点击事件,通过被点击的子控件的子类中的点击事件拦截方法拦截所述点击事件;
位置信息转换模块,用于将所述点击事件对应的第一位置信息转换为相对于所述被点击的子控件所属的展示控件的第二位置信息,所述第一位置信息为点击动作在所述被点击的子控件中的位置信息;
点击位置上传模块,用于将所述第二位置信息确定为针对所述被点击子控件所属的展示控件的点击位置,发送给后台服务器;
点击事件透传模块,用于将所述点击事件透传给所述被点击的子控件所属的类,以通过所述被点击的子控件所属的类中的方法处理所述点击事件。
可选地,所述页面显示文件还包括针对每个展示控件的配置信息,所述配置信息用于表征是否需要获取展示控件的点击位置;
所述子类生成模块,具体用于针对每一需要获取点击位置的展示控件,生成该展示控件中每一子控件所属的类对应的子类。
可选地,所述子类生成模块,具体用于通过系统函数class_addMethod在每一子类中增加点击事件拦截方法。
可选地,所述位置信息转换模块,具体用于:
获取所述被点击的子控件所属的展示控件的视图层级结构,所述视图层级结构包括:每个子控件在其所属的展示控件内的位置信息;
根据所述视图层级结构,将所述第一位置信息转换为相对于所述被点击的子控件所属的展示控件的第二位置信息。
可选地,所述点击事件透传模块,具体用于:通过系统函数objc_msgSendSuper将所述点击事件透传给所述被点击的子控件所属的类。
可选地,所述点击事件包括开始点击事件和结束点击事件。
可选地,所述位置信息转换模块,还用于通过系统函数获取所述点击事件对应的第一位置信息。
一方面,本申请一实施例提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行计算机程序时实现上述任一种方法的步骤。
一方面,本申请一实施例提供了一种计算机可读存储介质,其上存储有计算机程序指令,该计算机程序指令被处理器执行时实现上述任一种方法的步骤。
一方面,本申请一实施例提供了一种计算机程序产品,所述计算机程序产品包括存储在计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,所述程序指令被处理器执行时实现上述任一种方法的步骤。
本申请实施例提供的控件点击事件处理方法、装置、电子设备及存储介质,在控件显示前,根据展示控件内每个子控件所属的类动态生成对应的子类,并在子类中增加点击事件拦截方法,实现子类对点击事件的拦截,并基于点击事件对应的第一位置信息确定相对于展示控件的点击位置。因此,不需要修改子控件原有的内部实现方法以及视图层级结构,即可获取点击动作在展示控件内的点击位置,且针对任何一种结构的展示控件,都可以自动实现获取点击位置的功能,无需逐个手动修改控件。因此,本申请实施例提供的控件点击事件处理方法具有通用、高效、快捷的优点,并且大幅度降低了实现成本。
附图说明
通过参考附图阅读下文的详细描述,本申请示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本申请的若干实施方式,其中:
图1为在页面中展示多个展示控件的示意图;
图2为本申请实施例提供的控件点击事件处理方法的应用场景示意图;
图3为本申请一实施例提供的控件点击事件处理方法的流程示意图;
图4为本申请一实施例提供的基于运行时机制生成的子控件的子类实现控件点击事件处理方法的示意图;
图5A为本申请一实施例提供的点击事件相对子控件的位置信息的示意图;
图5B为本申请一实施例提供的计算点击事件相对展示控件的位置信息的示意图;
图6为本申请一实施例提供的控件点击事件处理装置的结构示意图;
图7为本申请一实施例提供的电子设备的结构示意图。
具体实施方式
下面将参考若干示例性实施方式来描述本申请的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本申请,而并非以任何方式限制本申请的范围。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
本领域技术人员知道,本申请的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。
在本文中,需要理解的是,附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。
为了方便理解,下面对本申请实施例中涉及的名词进行解释:
应用(Application,APP):即应用程序,可以完成某项或多项业务的计算机程序,一般具有可视的显示界面,能与用户进行交互,比如电子地图和浏览器等都可以称为应用。常见的应用主要分两类:一类是预装的系统应用,比如短信、照片、备忘录、Safari等;另一类是第三方应用,比如资讯类应用、购物类应用、社交类应用等等。
终端设备,可以安装各类应用,并且能够将已安装的应用中提供的对象进行显示的设备,终端设备可以是移动的,也可以是固定的。桌面计算机、移动电话、移动电脑、平板电脑、媒体播放器、智能可穿戴设备、智能电视、车载设备、个人数字助理(personaldigital assistant,PDA)、销售终端(point of sales,POS)或其它能够实现上述功能的电子设备等。
控件:是指对数据和方法的封装。控件可以有自己的属性和方法,其中属性是控件数据的简单访问者,方法则是控件的一些简单而可见的功能,对于移动端应用来说,应用上展示的所有内容都是由一个个控件所构成的,比如用来点击的按钮、用来阅读的新闻内容等。
展示控件:是指由多个控件所组成的集合。例如,参考图1,当在应用中展示一篇新闻时,该新闻对应的展示控件可由一个标题控件、一个简介控件和图片控件构成。应用中可能同时显示多个不同的展示控件。
子控件:是指展示控件内的控件。如图1中,新闻对应的展示控件包括3个子控件:标题控件、简介控件和图片控件。
类(Class):是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础。类是一种用户定义的引用数据类型,也称类类型,每个类包含数据说明和一组操作数据或传递消息的函数。
子类(Subclass):即是继承而来的类,父类即是被继承的类,父类也可以称为基类。子类拥有其继承的父类所具有的属性。
透传,即透明传输(pass-through),指的是在通讯中不管传输的业务内容如何,只负责将传输的内容由源地址传输到目的地址,而不对业务数据内容做任何改变。
视图层级:又称视图层级结构,是指应用中不同的控件,由于添加顺序以及父控件类型的不同,而区分出的视图逻辑结构。
运行时(Runtime)机制:是动态语言(例如Objective-C)的一项特性,是指在程序运行过程中才确定对象的类型,即程序在运行时决定了编程的最终实现,通过此特性可以实现在不修改子控件所属类的前提下,动态地修改对象的类型以及内部实现的方法。
下面参考本申请的若干代表性实施方式,详细阐释本申请的原理和精神。
发明概述
本申请的发明人发现,现有技术中,当用户点击了终端设备屏幕上显示的一个展示控件时,只能通过修改原有的控件或视图层级结构,或在原有视图层级结构中新增控件的方式,来获取点击位置相对于展示控件的坐标位置。但是,由于不同种类的控件的内部实现方式完全不同,且不同展示控件对应的视图层级结构也不同,因此,为了获取不同展示控件中点击事件的坐标,需要对不同种类的控件进行单独修改,当需要获取点击位置的展示控件的数量很大时,修改工作量巨大。因此,现有的获取点击事件在展示控件中的坐标位置的方法操作繁琐、实现成本高、通用性很低。
为了解决上述问题,本申请实施例提供了一种控件点击事件处理方法,具体包括:获取页面显示文件,页面显示文件包括至少一个展示控件,每个展示控件内包括至少一个子控件;在显示至少一个展示控件之前,生成每一子控件所属的类对应的子类,并在每一子类中增加点击事件拦截方法,子类拥有其对应的类所具有的属性;响应针对显示的任一子控件的点击事件,通过被点击的子控件的子类中的点击事件拦截方法拦截点击事件;将点击事件对应的第一位置信息转换为相对于被点击的子控件所属的展示控件的第二位置信息,第一位置信息为点击动作在被点击的子控件中的位置信息;将第二位置信息确定为针对被点击子控件所属的展示控件的点击位置,发送给后台服务器;将点击事件透传给被点击的子控件所属的类,以通过被点击的子控件所属的类中的方法处理点击事件。本申请实施例提供的控件点击事件处理方法,在控件显示前,根据展示控件内每个子控件所属的类动态生成对应的子类,并在子类中增加点击事件拦截方法,实现子类对点击事件的拦截,并基于点击事件对应的第一位置信息确定相对于展示控件的点击位置,因此,不需要修改子控件原有的内部实现方法以及视图层级结构,即可获取点击动作在展示控件内的点击位置,具有通用、高效、快捷的优点,并且大幅度降低了实现成本。
在介绍了本申请的基本原理之后,下面具体介绍本申请的各种非限制性实施方式。
应用场景总览
参考图2,其为本申请实施例提供的控件点击事件处理方法的应用场景示意图。该应用场景包括终端设备201和后台服务器202。其中,终端设备201和后台服务器202之间通过通信网络连接。终端设备201包括但不限于桌面计算机、移动电话、移动电脑、平板电脑、媒体播放器、智能可穿戴设备、智能电视、车载设备、个人数字助理(personal digitalassistant,PDA)、销售终端(point of sales,POS)或其它能够实现上述功能的电子设备等。后台服务器202可以是一台服务器、若干台服务器组成的服务器集群或云计算中心。
终端设备201安装有多个应用,用户打开某一应用后,该应用在终端设备201的显示屏上展示对应的页面,该页面中包括至少一个展示控件,每个展示控件中包括至少一个子控件。用户可点击任一子控件以触发应用执行该子控件对应的功能,例如跳转到其他页面、查看图片、播放视频、写评论等,应用响应点击事件,确定被点击的子控件,然后通过该子控件所属的类(Class)执行相应的功能。例如,子控件的功能为跳转到某一页面,则通过终端设备201向后台服务器202发送针对该页面的获取请求,后台服务器在收到获取请求后,向终端设备201反馈相应的页面数据,应用根据页面数据显示页面。
示例性方法
下面结合图2的应用场景,来描述根据本申请示例性实施方式的控件点击事件处理方法。需要注意的是,上述应用场景仅是为了便于理解本申请的精神和原理而示出,本申请的实施方式在此方面不受任何限制。相反,本申请的实施方式可以应用于适用的任何场景。
参考图3,本申请实施例提供了的一种控件点击事件处理方法,可应用于图2所示的终端设备201,具体可包括以下步骤:
S301、获取页面显示文件,页面显示文件包括至少一个展示控件,每个展示控件内包括至少一个子控件。
本申请实施例中,一个页面对应的一个页面显示文件,页面显示文件包括对应的页面中需要显示的内容以及每个内容的显示方式,例如,显示的控件类型、控件数量、控件的位置、控件中显示的内容等。每个应用至少包括一个页面显示文件,页面显示文件可以存储在终端设备本地,也可以在使用应用过程中基于用户的操作从后台服务器获取相应的页面显示文件,以使终端设备根据页面显示文件展示对应的页面内容。
S302、在显示至少一个展示控件之前,生成每一子控件所属的类对应的子类,并在每一子类中增加点击事件拦截方法,子类拥有其对应的类所具有的属性。
具体实施时,终端设备在显示展示控件之前,生成展示控件中的子控件所属的类对应的子类,以使生成的子类继承子控件所属的类所具有的属性,并在每一个子类增加预先配置好的点击事件拦截方法,以使子控件能够拦截终端设备的软件系统生成的点击事件。在完成点击事件拦截方法的添加后,在终端设备的显示屏上显示展示控件。
具体实施时,可通过动态语言的运行时(Runtime)机制,生成子控件所属的类对应的子类,并在生成的子类中增加点击事件拦截方法。
具体地,可将子控件的类名(Class Name)拼接上特定的标志,作为该子控件所属类的子类的类名,并通过系统函数objc_registerClassPair进行注册;然后通过系统函数object_setClass根据子控件所属的类,动态生成该子控件所属的类对应的子类,由于继承关系,生成的子类已经拥有其对应的父类(即该控件所属的类)全部的属性以及方法;最后,在动态生成的每个子类中,通过系统函数class_addMethod,在子类中增加点击事件拦截方法对应的函数,使得子类在继承父类的方法和属性的基础上又具备拦截点击事件的功能,从而实现子控件对点击事件的拦截。
本申请实施例中,点击事件是指终端设备处理点击手势的原生方法,点击事件包括开始点击事件(touchesBegan)和结束点击事件(touchesEnded),开始点击事件即手势按下触发的事件,结束点击事件即手势抬起触发的事件。
S303、响应针对显示的任一子控件的点击事件,通过被点击的子控件的子类中的点击事件拦截方法拦截点击事件。
具体实施时,当用户点击终端设备上显示的任一子控件时,终端设备的软件系统响应该点击事件,通过原生的响应链(Responder Chain)机制,根据终端设备上当前显示的页面对应的视图层级结构,确定出处理该点击事件的最优响应控件,并通知该最优响应控件处理该点击事件。
由于在子控件的子类中增加了点击事件拦截方法,因此,当终端设备的软件系统通知子控件处理点击事件时,该子控件的子类可将通过点击事件拦截方法拦截该点击事件,然后确定出该点击事件对应的点击位置后,再将点击事件透传给该子控件所属的类,通过子控件所属的类对该点击事件进行处理,实现该子控件相应的功能。这样,可在用户无感知的情况下获取点击事件对应的点击位置。其中,可通过终端设备的软件系统提供的系统函数获取点击事件对应的第一位置信息。
S304、将点击事件对应的第一位置信息转换为相对于被点击的子控件所属的展示控件的第二位置信息,第一位置信息为点击动作在被点击的子控件中的位置信息。
具体实施时,终端设备的软件系统响应点击事件,可确定出该点击事件对应的点击动作相对于最优响应控件(即被点击的子控件)中的位置信息,作为点击事件对应的第一位置信息。然后,根据子控件和其所属的展示控件之间的位置关系,将点击事件对应的第一位置信息转换为相对于被点击的子控件所属的展示控件的第二位置信息。
S305、将第二位置信息确定为针对被点击子控件所属的展示控件的点击位置,发送给后台服务器。
S306、将点击事件透传给被点击的子控件所属的类,以通过被点击的子控件所属的类中的方法处理点击事件。
具体实施时,可通过系统函数objc_msgSendSuper将点击事件透传给被点击的子控件所属的类。
参考图4,为基于运行时机制生成的某一子控件的子类,子类中包括点击事件拦截模块、位置信息转换模块、点击事件上传模块和点击事件透传模块。用户点击终端设备上显示的子控件后,终端设备的软件系统响应该点击事件,通过响应链机制确定出处理该点击事件的最优响应子控件,并通知该最优响应子控件处理该点击事件,此时该子控件通过子类中的点击事件拦截模块拦截该点击事件,然后通过位置信息转换模块将点击事件对应的第一位置信息转换为相对于被点击的子控件所属的展示控件的第二位置信息,接着由点击事件上传模块将第二位置信息作为针对被点击子控件所属的展示控件的点击位置发送给后台服务器,最后通过点击事件透传模块将点击事件透传给被点击的子控件所属的类。
本申请实施例提供的控件点击事件处理方法,在控件显示前,根据展示控件内每个子控件所属的类动态生成对应的子类,并在子类中增加点击事件拦截方法,实现子类对点击事件的拦截,并基于点击事件对应的第一位置信息确定相对于展示控件的点击位置。因此,不需要修改子控件原有的内部实现方法以及视图层级结构,即可获取点击动作在展示控件内的点击位置,且针对任何一种结构的展示控件,都可以自动实现获取点击位置的功能,无需逐个手动修改控件。因此,本申请实施例提供的控件点击事件处理方法具有通用、高效、快捷的有点,并且大幅度降低了实现成本。
在上述任一实施方式的基础上,页面显示文件还包括针对每个展示控件的配置信息,配置信息用于表征是否需要获取展示控件的点击位置。
相应地,步骤S302中的生成每一子控件所属的类对应的子类,具体包括:针对每一需要获取点击位置的展示控件,生成该展示控件中每一子控件所属的类对应的子类。
具体实施时,开发人员可根据需求预先在页面显示文件中设置每个展示控件的配置信息,以标识出需要获取点击位置的展示控件。终端设备在获取到页面显示文件后,根据页面显示文件中每个展示控件的配置信息,确定出需要获取点击位置的展示控件,生成这些展示控件中每一子控件所属的类对应的子类。
例如,可通过配置信息中的指定字段reportCoordinates,来标记是否需要获取该展示控件的点击位置。当展示控件的配置信息中的reportCoordinates=1时,表示需要获取该展示控件的点击位置,则生成该展示控件中每一子控件所属的类对应的子类;当展示控件的配置信息中的reportCoordinates=0时,表示不需要获取展示控件的点击位置,则无需生成该展示控件中各个子控件对应的子类,按照该展示控件中各个子控件原有的实现方法响应点击事件即可。
为此,开发人员可根据实际需求自由配置需要获取点击位置的展示控件,仅获取这些展示控件的点击位置。
在上述任一实施方式的基础上,步骤S304具体包括:获取被点击的子控件所属的展示控件的视图层级结构,视图层级结构包括:每个子控件在其所属的展示控件内的位置信息;根据视图层级结构,将第一位置信息转换为相对于被点击的子控件所属的展示控件的第二位置信息。
具体实施时,可以子控件上的某一点作为基准点,确定点击动作相对于子控件上的基础点的坐标,作为点击事件对应的第一位置信息,该基准点可以是子控件的左上角的顶点、右上角的顶点、中心点等,具体由终端设备内的软件系统采用的函数方法确定。因此,通过系统函数获取到的第一位置信息包括点击动作相对于子控件的基准点的横坐标和纵坐标,当点击事件为开始点击事件时,第一位置信息包括:手势按下时相对于子控件的基准点的横坐标和纵坐标,当点击事件为结束点击事件时,第一位置信息包括:手势抬起时相对于子控件的基准点的横坐标和纵坐标。
以图5A为例,子控件501的基准点O1为左上角的顶点,即左上角的顶点在子控件501对应的第一坐标系中的坐标值为(0,0),第一坐标系的X轴从左到右方向为正方向,Y轴从上到下方向为正方向。在上述第一坐标系下,左侧图中(a1,b1)为手势按下时对应的第一位置信息,右侧图中的(a2,b2)为手势抬起时对应的第一位置信息,其中,a1为手势按下时相对于子控件501的基准点O1的横坐标,b1为手势按下时相对于子控件501的基准点O1的纵坐标,a2为手势抬起时相对于子控件501的基准点O1的横坐标,b2为手势抬起时相对于子控件501的基准点O1的纵坐标。
具体实施时,可以展示控件左上角的顶点为坐标原点,展示控件对应的第二坐标系的X轴从左到右方向为正方向,Y轴从上到下方向为正方向。将点击事件对应的第一位置信息转换为相对于被点击的子控件所属的展示控件的第二位置信息,即是将点击事件在第一坐标系中的坐标转换到第二坐标系中。展示控件的视图层级结构中的每个子控件在其所属的展示控件内的位置信息,可以是子控件的基准点在第二坐标系中的坐标信息。
以图5B为例,其展示了图5A中的子控件501与其所属的展示控件5之间的位置关系。展示控件502对应的第二坐标系的X轴从左到右方向为正方向,Y轴从上到下方向为正方向,子控件501的基准点O1相对于第二坐标系的原点O的坐标为(x1,y1)。手势按下时的第一位置信息为(a1,b1),将(a1,b1)转换到第二坐标系中为(A1,B1),其中,A1=x1+a1,B1=y1+b1;手势抬起时的第一位置信息为(a2,b2),将(a2,b2)转换到第二坐标系中为(A2,B2),其中,A2=x2+a2,B2=y2+b2。
具体实施时,步骤S304可由子控件调用系统函数locationInView(UIView*view)实现,其中,subView为子控件,View为展示控件。获取的坐标信息由PointManager类进行管理,PointManager中存储坐标信息包括:
CGFloat downPointX:代表手势按下时的横坐标;
CGFloat downPointY:代表手势按下时的纵坐标;
CGFloat upPointX:代表手势抬起时的横坐标;
CGFloat upPointY:代表手势抬起时的纵坐标。
基于上述任一控件点击事件处理方法,可方便快捷地获取到用户的点击动作相对于展示控件的点击位置,进而通过分析大量获取到的点击位置,获得用户的点击行为习惯,比如通过分析点击位置获知用户习惯点击展示控件的左上角,则可以结合用户的点击行为习惯来调整控件的布局方式。此外,还可以根据获取到的针对展示控件的点击位置,判断是否为多次点击或者机器人点击,防止作弊。
示例性设备
在介绍了本申请示例性实施方式的方法之后,接下来对本申请示例性实施方式的控件点击事件处理装置进行介绍。
如图6所示,为本申请实施例提供的控件点击事件处理装置的结构示意图。在一个实施例中,控件点击事件处理装置60包括:获取模块601、子类生成模块602、点击事件拦截模块603、位置信息转换模块604、点击位置上传模块605和点击事件透传模块606。
获取模块601,用于获取页面显示文件,页面显示文件包括至少一个展示控件,每个展示控件内包括至少一个子控件;
子类生成模块602,用于在显示至少一个展示控件之前,生成每一子控件所属的类对应的子类,并在每一子类中增加点击事件拦截方法,子类拥有其对应的类所具有的属性;
点击事件拦截模块603,用于响应针对显示的任一子控件的点击事件,通过被点击的子控件的子类中的点击事件拦截方法拦截点击事件;
位置信息转换模块604,用于将点击事件对应的第一位置信息转换为相对于被点击的子控件所属的展示控件的第二位置信息,第一位置信息为点击动作在被点击的子控件中的位置信息;
点击位置上传模块605,用于将第二位置信息确定为针对被点击子控件所属的展示控件的点击位置,发送给后台服务器;
点击事件透传模块606,用于将点击事件透传给被点击的子控件所属的类,以通过被点击的子控件所属的类中的方法处理点击事件。
可选地,页面显示文件还包括针对每个展示控件的配置信息,配置信息用于表征是否需要获取展示控件的点击位置。
相应地,子类生成模块602,具体用于针对每一需要获取点击位置的展示控件,生成该展示控件中每一子控件所属的类对应的子类。
可选地,子类生成模块602,具体用于通过系统函数class_addMethod在每一子类中增加点击事件拦截方法。
可选地,位置信息转换模块604,具体用于:
获取被点击的子控件所属的展示控件的视图层级结构,视图层级结构包括:每个子控件在其所属的展示控件内的位置信息;
根据视图层级结构,将第一位置信息转换为相对于被点击的子控件所属的展示控件的第二位置信息。
可选地,点击事件透传模块606,具体用于:通过系统函数objc_msgSendSuper将点击事件透传给被点击的子控件所属的类。
可选地,点击事件包括开始点击事件和结束点击事件。
可选地,位置信息转换模块604,还用于通过系统函数获取点击事件对应的第一位置信息。
本申请实施例提供的控件点击事件处理装置,与上述控件点击事件处理方法采用了相同的发明构思,能够取得相同的有益效果,在此不再赘述。
基于与上述控件点击事件处理方法相同的发明构思,本申请实施例还提供了一种电子设备,该电子设备具体可以为桌面计算机、便携式计算机、服务器等。如图7所示,该电子设备70可以包括处理器701和存储器702。
处理器701可以是通用处理器,例如中央处理器(CPU)、数字信号处理器(DigitalSignal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件,可以实现或者执行本申请实施例中公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
存储器702作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块。存储器可以包括至少一种类型的存储介质,例如可以包括闪存、硬盘、多媒体卡、卡型存储器、随机访问存储器(Random Access Memory,RAM)、静态随机访问存储器(Static Random Access Memory,SRAM)、可编程只读存储器(Programmable Read Only Memory,PROM)、只读存储器(Read Only Memory,ROM)、带电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,EEPROM)、磁性存储器、磁盘、光盘等等。存储器是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。本申请实施例中的存储器702还可以是电路或者其它任意能够实现存储功能的装置,用于存储程序指令和/或数据。
示例性程序产品
本申请实施例提供了一种计算机可读存储介质,用于储存为上述电子设备所用的计算机程序指令,其包含用于执行上述控件点击事件处理方法的程序。
上述计算机存储介质可以是计算机能够存取的任何可用介质或数据存储设备,包括但不限于磁性存储器(例如软盘、硬盘、磁带、磁光盘(MO)等)、光学存储器(例如CD、DVD、BD、HVD等)、以及半导体存储器(例如ROM、EPROM、EEPROM、非易失性存储器(NAND FLASH)、固态硬盘(SSD))等。
在一些可能的实施方式中,本申请的各个方面还可以实现为一种计算机程序产品,其包括程序代码,当该计算机程序产品在服务器设备上运行时,该计算机程序产品用于使所述服务器设备执行本说明书上述“示例性方法”部分中描述的根据本申请各种示例性实施方式的控件点击事件处理方法中的步骤。
所述计算机程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
根据本申请的实施方式的用于即时通信应用的计算机程序产品,其可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在服务器设备上运行。然而,本申请的程序产品不限于此,在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本申请操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
应当注意,尽管在上文详细描述中提及了装置的若干单元或子单元,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本申请的实施方式,上文描述的两个或更多单元的特征和功能可以在一个单元中具体化。反之,上文描述的一个单元的特征和功能可以进一步划分为由多个单元来具体化。
此外,尽管在附图中以特定顺序描述了本申请方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
虽然已经参考若干具体实施方式描述了本申请的精神和原理,但是应该理解,本申请并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本申请旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。
Claims (14)
1.一种控件点击事件处理方法,其特征在于,包括:
获取页面显示文件,所述页面显示文件包括至少一个展示控件,每个展示控件内包括至少一个子控件;
在显示所述至少一个展示控件之前,生成每一子控件所属的类对应的子类,并在每一子类中增加点击事件拦截方法,所述子类拥有其对应的类所具有的属性;
响应针对显示的任一子控件的点击事件,通过被点击的子控件的子类中的点击事件拦截方法拦截所述点击事件;
将所述点击事件对应的第一位置信息转换为所述点击事件相对于所述被点击的子控件所属的展示控件的第二位置信息,所述第一位置信息为点击动作在所述被点击的子控件中的位置信息;所述将所述点击事件对应的第一位置信息转换为相对于所述被点击的子控件所属的展示控件的第二位置信息,具体包括:获取所述被点击的子控件所属的展示控件的视图层级结构,所述视图层级结构包括:每个子控件在其所属的展示控件内的位置信息;根据所述视图层级结构,将所述第一位置信息转换为所述点击事件相对于所述被点击的子控件所属的展示控件的第二位置信息;
将所述第二位置信息确定为针对所述被点击子控件所属的展示控件的点击位置,发送给后台服务器;
将所述点击事件透传给所述被点击的子控件所属的类,以通过所述被点击的子控件所属的类中的方法处理所述点击事件。
2.根据权利要求1所述的方法,其特征在于,所述页面显示文件还包括针对每个展示控件的配置信息,所述配置信息用于表征是否需要获取展示控件的点击位置;
所述生成每一子控件所属的类对应的子类,具体包括:
针对每一需要获取点击位置的展示控件,生成该展示控件中每一子控件所属的类对应的子类。
3.根据权利要求1或2所述的方法,其特征在于,所述在每一子类中增加点击事件拦截方法,具体包括:
通过系统函数class_addMethod在每一子类中增加点击事件拦截方法。
4.根据权利要求1或2所述的方法,其特征在于,所述将所述点击事件透传给所述被点击的子控件所属的类,具体包括:
通过系统函数objc_msgSendSuper将所述点击事件透传给所述被点击的子控件所属的类。
5.根据权利要求1或2所述的方法,其特征在于,所述点击事件包括开始点击事件和结束点击事件。
6.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
通过系统函数获取所述点击事件对应的第一位置信息。
7.一种控件点击事件处理装置,其特征在于,包括:
获取模块,用于获取页面显示文件,所述页面显示文件包括至少一个展示控件,每个展示控件内包括至少一个子控件;
子类生成模块,用于在显示所述至少一个展示控件之前,生成每一子控件所属的类对应的子类,并在每一子类中增加点击事件拦截方法,所述子类拥有其对应的类所具有的属性;
点击事件拦截模块,用于响应针对显示的任一子控件的点击事件,通过被点击的子控件的子类中的点击事件拦截方法拦截所述点击事件;
位置信息转换模块,用于将所述点击事件对应的第一位置信息转换为所述点击事件相对于所述被点击的子控件所属的展示控件的第二位置信息,所述第一位置信息为点击动作在所述被点击的子控件中的位置信息;
所述位置信息转换模块,具体用于:获取所述被点击的子控件所属的展示控件的视图层级结构,所述视图层级结构包括:每个子控件在其所属的展示控件内的位置信息;根据所述视图层级结构,将所述第一位置信息转换为所述点击事件相对于所述被点击的子控件所属的展示控件的第二位置信息;
点击位置上传模块,用于将所述第二位置信息确定为针对所述被点击子控件所属的展示控件的点击位置,发送给后台服务器;
点击事件透传模块,用于将所述点击事件透传给所述被点击的子控件所属的类,以通过所述被点击的子控件所属的类中的方法处理所述点击事件。
8.根据权利要求7所述的装置,其特征在于,所述页面显示文件还包括针对每个展示控件的配置信息,所述配置信息用于表征是否需要获取展示控件的点击位置;
所述子类生成模块,具体用于针对每一需要获取点击位置的展示控件,生成该展示控件中每一子控件所属的类对应的子类。
9.根据权利要求7或8所述的装置,其特征在于,所述子类生成模块,具体用于通过系统函数class_addMethod在每一子类中增加点击事件拦截方法。
10.根据权利要求7或8所述的装置,其特征在于,所述点击事件透传模块,具体用于:通过系统函数objc_msgSendSuper将所述点击事件透传给所述被点击的子控件所属的类。
11.根据权利要求7或8所述的装置,其特征在于,所述点击事件包括开始点击事件和结束点击事件。
12.根据权利要求7或8所述的装置,其特征在于,所述位置信息转换模块,还用于通过系统函数获取所述点击事件对应的第一位置信息。
13.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至6任一项所述方法的步骤。
14.一种计算机可读存储介质,其上存储有计算机程序指令,其特征在于,该计算机程序指令被处理器执行时实现权利要求1至6任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911355451.6A CN111158820B (zh) | 2019-12-25 | 2019-12-25 | 控件点击事件处理方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911355451.6A CN111158820B (zh) | 2019-12-25 | 2019-12-25 | 控件点击事件处理方法、装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111158820A CN111158820A (zh) | 2020-05-15 |
CN111158820B true CN111158820B (zh) | 2023-07-21 |
Family
ID=70556753
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911355451.6A Active CN111158820B (zh) | 2019-12-25 | 2019-12-25 | 控件点击事件处理方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111158820B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113835697A (zh) * | 2020-06-23 | 2021-12-24 | 北京字节跳动网络技术有限公司 | 事件响应方法和装置 |
CN112099643A (zh) * | 2020-08-31 | 2020-12-18 | 北京爱奇艺科技有限公司 | 云端输入方法、系统、装置、电子设备和存储介质 |
CN113963580A (zh) * | 2021-10-19 | 2022-01-21 | 创盛视联数码科技(北京)有限公司 | 课件播放方法及教学系统 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104572783A (zh) * | 2013-10-29 | 2015-04-29 | 深圳市腾讯计算机系统有限公司 | 网页点击情况的展示方法及装置 |
CN106909300A (zh) * | 2017-02-08 | 2017-06-30 | 福建天泉教育科技有限公司 | 一种触屏点击识别方法及系统 |
CN107491488A (zh) * | 2017-07-18 | 2017-12-19 | 北京京东尚科信息技术有限公司 | 页面数据采集的方法和装置 |
CN107633019A (zh) * | 2017-08-24 | 2018-01-26 | 阿里巴巴集团控股有限公司 | 一种页面事件采集方法和装置 |
CN108763016A (zh) * | 2018-05-15 | 2018-11-06 | 广州市千钧网络科技有限公司 | 一种采集用户行为数据的方法及装置 |
CN109669589A (zh) * | 2018-10-17 | 2019-04-23 | 天津字节跳动科技有限公司 | 文档编辑方法和装置 |
CN110018769A (zh) * | 2018-01-09 | 2019-07-16 | 武汉斗鱼网络科技有限公司 | 一种基于Android的父控件设置方法和父控件 |
CN110308954A (zh) * | 2019-05-24 | 2019-10-08 | 天津五八到家科技有限公司 | 点击事件拦截方法、装置及移动终端 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170185422A1 (en) * | 2015-12-28 | 2017-06-29 | Le Holdings (Beijing) Co., Ltd. | Method and system for generating and controlling composite user interface control |
-
2019
- 2019-12-25 CN CN201911355451.6A patent/CN111158820B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104572783A (zh) * | 2013-10-29 | 2015-04-29 | 深圳市腾讯计算机系统有限公司 | 网页点击情况的展示方法及装置 |
CN106909300A (zh) * | 2017-02-08 | 2017-06-30 | 福建天泉教育科技有限公司 | 一种触屏点击识别方法及系统 |
CN107491488A (zh) * | 2017-07-18 | 2017-12-19 | 北京京东尚科信息技术有限公司 | 页面数据采集的方法和装置 |
CN107633019A (zh) * | 2017-08-24 | 2018-01-26 | 阿里巴巴集团控股有限公司 | 一种页面事件采集方法和装置 |
CN110018769A (zh) * | 2018-01-09 | 2019-07-16 | 武汉斗鱼网络科技有限公司 | 一种基于Android的父控件设置方法和父控件 |
CN108763016A (zh) * | 2018-05-15 | 2018-11-06 | 广州市千钧网络科技有限公司 | 一种采集用户行为数据的方法及装置 |
CN109669589A (zh) * | 2018-10-17 | 2019-04-23 | 天津字节跳动科技有限公司 | 文档编辑方法和装置 |
CN110308954A (zh) * | 2019-05-24 | 2019-10-08 | 天津五八到家科技有限公司 | 点击事件拦截方法、装置及移动终端 |
Also Published As
Publication number | Publication date |
---|---|
CN111158820A (zh) | 2020-05-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113110941B (zh) | 使用应用容器管理代码和依赖性数据的传递 | |
CN111158820B (zh) | 控件点击事件处理方法、装置、电子设备及存储介质 | |
CN104951326B (zh) | 网页访问方法及装置 | |
WO2020038163A1 (zh) | 图标的显示方法、装置、终端及存储介质 | |
US11144195B2 (en) | Fast data copying method and electronic device | |
US20140026057A1 (en) | Providing access to a remote application via a web client | |
CN109074278B (zh) | 验证移动应用中的有状态动态链接 | |
CN109471626B (zh) | 页面逻辑结构、页面生成方法、页面数据处理方法及装置 | |
US10983625B2 (en) | Systems and methods for measurement of unsupported user interface actions | |
CN110874172B (zh) | 放大app界面的方法、装置、介质及电子设备 | |
CN112817657A (zh) | 一种应用程序启动项加载方法、装置、系统及存储介质 | |
CN109213668B (zh) | 操作记录方法、装置及终端 | |
US20170212962A1 (en) | Apparatus and method for managing history information in an electronic device | |
CN110618811B (zh) | 信息呈现方法和装置 | |
CN112367295B (zh) | 插件展示方法及装置、存储介质及电子设备 | |
US8836727B2 (en) | System level graphics manipulations on protected content | |
CN115373869A (zh) | 基于aar的进程处理方法、装置及电子设备 | |
CN112148499A (zh) | 数据上报方法、装置、计算机设备及介质 | |
US20180300160A1 (en) | Host and Component Relationship between Applications | |
US11748120B1 (en) | Server-based user interface rendering | |
CN113835791B (zh) | 呈现视图组件的层级关系的方法和装置 | |
CN112965699B (zh) | 前端页面生成方法、装置、计算机系统和可读存储介质 | |
US11874890B2 (en) | Multi-entry point navigation for user interfaces | |
US20230396621A1 (en) | Method and system for creating social media content collections | |
WO2022242503A1 (zh) | 投屏方法及相关装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |