gpt4 book ai didi

ios - 局部变量会自行更新,为什么

转载 作者:行者123 更新时间:2023-11-30 12:55:26 25 4
gpt4 key购买 nike

我创建了一个UIView组件(在主 Storyboard中它占据了整个屏幕)。它链接到的类称为 MyFullView ,如下所示:

import UIKit

class MyFullView: UIView {
var myTouch: UITouch?

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesBegan(touches, with: event)
// I only initialized myTouch here.
myTouch = UITouch()
myTouch = touches.first
}

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
// I just print out myTouch location, magically the value is updated for each finger movement, why?
print("myTouch = \(myTouch?.location(in: self))")
super.touchesMoved(touches, with: event)
}
}

我声明了变量myTouch并在touchesBegan回调中初始化了它。我没有任何代码更新 myTouch 的值。

但是当我在模拟器中运行我的应用程序时,单击鼠标并移动/拖动,我可以看到日志,例如:

myTouch = Optional((100.5, 117.0))
myTouch = Optional((99.5, 117.0))
myTouch = Optional((99.0, 117.0))
myTouch = Optional((98.5, 117.0))
myTouch = Optional((98.5, 118.0))
myTouch = Optional((98.0, 118.0))
myTouch = Optional((97.5, 118.0))
...

为什么以及如何myTouch变量到底会更新自身的值吗?我不明白,有人可以向我解释一下什么是魔法吗?

最佳答案

您的答案位于此处的第二行:

        myTouch = UITouch()
myTouch = touches.first

您已将 myTouch 分配给 touches 中的第一个对象。当您收到触摸事件时,UITouch 将是触摸生命周期中的同一实例(直到您完成或取消)。

因此,您将在 touchesMoved 中看到触摸的位置更新。

如果您想拥有原始位置,则需要将其存储起来。

请注意,您的代码在多点触控方面会出现问题。

关于ios - 局部变量会自行更新,为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40454410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com