我想显示很多星星,当用户触摸其中一颗星星的内部时,我可以改变星星的颜色,并将星星id附加到数组中。
我有一个恒星坐标数组=[[恒星1的顶点坐标],[恒星2的顶点坐标],...,[恒星60的顶点坐标]]
//function to create a star UIBezierPath
func StarFromArray(points: [Array<Int>] ) -> UIBezierPath {
let starPath = UIBezierPath()
let point1 = points[0]
starPath.move(to: CGPoint(x: point1[0], y: point1[1]))
for i in 1...(starPath.count-1) {
let ar = starPath[i]
starPath.addLine(to: CGPoint(x: ar[0], y: ar[1]))
}
starPath.close()
return starPath
}
//function to create and display every star from my StarArray, I call this in ViewDidLoad
func loadStar() {
for i in 0...StarArray.size {
let ar = StarArray[i]
let starLayer = CAShapeLayer()
let star = StarFromArray(points: ar)
starLayer.path = star.cgPath
starLayer.fillColor = UIColor.blue.cgColor
self.view.layer.addSublayer(starLayer)
}
}
上面的代码显示了我所有的星星,现在我需要为我的每个星星创建一个触摸事件,这样当一个星星被触摸时,我可以将一个星星ID追加到一个数组中。
我该怎么做?
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
let touch = touches.first
let point = touch!.location(in: self.view)
if starLayer.path!.contains(point) {
print("star touched")
starLayer.fillColor = UIColor.blue.cgColor
}
}
上面的代码是如果我有一颗星的话可以使用的,但是如果我有很多颗星的话显然就不起作用了。
不能将触摸事件发送到图层。你得自己处理。我建议在包含这些图层的视图上附加一个手势识别器,然后为每个图层添加一个包含边界矩形的结构数组,然后确定哪一个图层是这样点击的。
CALayer确实有一个最棒的方法,你可以用它来判断一个轻击是否落在一个图层中,但你必须自己来决定它。您可以在父层上调用hittest()
,它会告诉您点击落在哪个子层(或父层)的帧上。
如果您想要检测不规则形状(如您的星型示例图像)内的抽头,您必须自己编写代码。(UIBezierPath和CGPath都有contains()
方法,您可以使用这些方法查询路径,以查看某个点是否位于路径内部。)
请帮助我解决以下问题 我需要创建一个名为的触发器,每当“contact”表更新时就会触发该触发器。在更新联系人详细信息之后,这个触发器将把org_name和action插入到表中。受影响日志表中的操作名称为。 id整数org_name varchar2(255)street_address1 varchar2(255)street_address2 varchar2(255)城市varchar2(
我试图在插入后创建一个触发器,它将更新另一个表。 这是我尝试的代码: 但我会收到以下错误消息: 1064-您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,了解使用“@qte AS integer”附近的正确语法;声明@code为整数;从INSERTED中选择@QTE=qteInv;%s“位于第4行
问题内容: 当我想使用SQL Server 2008 R2的预定义“创建触发器”创建触发器时,我迷路了。您能否给我一个直接的SQL语句,我可以用它创建触发器,并告诉我如何定义AFTER,BEFORE等所有内容? 另外,我如何知道行UPDATED / INSERTED / DELETED,并使用其列值在触发器内进行操作? 问题答案: 数据库是面向集合的,触发器也不例外。当执行给定的操作时,触发器将触
我想获取GET参数的值并触发一个事件。如何在Created方法中触发事件? 我尝试了这种方式,但没有找到点击方法:
我有一个烧瓶API,我使用烧瓶SQLAlChemy来处理SQLite数据库。我有一个存储日志条目的表,我想将最大行数限制为n。因为插入也是使用原始SQL从烧瓶之外的另一个脚本进行的,所以我创建了一个触发器来检查行数,如果行数高于n,则删除最旧的行数: 此触发器按预期工作,但我正在努力使用烧瓶-sqlalChemy设置它。如何设置触发器/执行原始SQL使用烧瓶sqlalChemy?SQL只需要在db
触摸操作概述 浏览器的触摸 API 由三个部分组成。 Touch:一个触摸点 TouchList:多个触摸点的集合 TouchEvent:触摸引发的事件实例 Touch接口的实例对象用来表示触摸点(一根手指或者一根触摸笔),包括位置、大小、形状、压力、目标元素等属性。有时,触摸动作由多个触摸点(多根手指)组成,多个触摸点的集合由TouchList接口的实例对象表示。TouchEvent接口的实例对