gpt4 book ai didi

ios - 如何禁用 "gesture recognizer"(XMCircleGestureRecognizer)?

转载 作者:可可西里 更新时间:2023-11-01 00:56:55 24 4
gpt4 key购买 nike

对于我正在构建的应用程序,我正在使用 this class ,并且,因为我在不使用苹果手势识别器的情况下识别其他手势,例如轻击、滑动或长按(我已经构建了自己的手势,因为苹果的手势识别器非常准确)我希望能够禁用 XMCircleGestureRecognizer,并且只是在我需要的时候启用它。

问题是,当我在某些情况下调用它时,即使我将手指从屏幕上移开并再次触摸屏幕,它仍然在 XMCircleGestureRecognizer 中,并且永远不会离开它。我必须终止该应用程序并重新启动它。

我不确定是否有必要提供我的一些代码,但如果需要,请告诉我(它有 600 行长,所以很难只获得你需要的部分)。

你知道我该怎么做吗?因为我完全坚持这一点。

非常感谢您的帮助!

编辑:

import UIKit

class ViewController: UIViewController {
var gesture: XMCircleGestureRecognizer?


override func viewDidLoad() {
super.viewDidLoad()
ascending = false
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
gesture?.isEnabled = false
super.touchesBegan(touches, with: event)
for touch in touches{
let point = touch.location(in: self.view)
for (index,finger) in fingers.enumerated() {
if finger == nil {
fingers[index] = String(format: "%p", touch)

if (finger1.isEmpty){
finger1 = [point.x, point.y]
} else if (finger2.isEmpty){
finger2 = [point.x, point.y]
} else if (finger3.isEmpty){
finger3 = [point.x, point.y]
} else if (finger4.isEmpty){
finger4 = [point.x, point.y]
} else if (finger5.isEmpty){
finger5 = [point.x, point.y]
}
break
}
}
}

timer = Timer.scheduledTimer(timeInterval: 0.3, target: self, selector: #selector(increaseValue), userInfo: nil, repeats: true)
if ascending {
ascending = false
}
else {
ascending = true
}
}

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesMoved(touches, with: event)

for touch in touches {
let point = touch.location(in: self.view)
for (index,finger) in fingers.enumerated() {
if let finger = finger, finger == String(format: "%p", touch) {
switch (index){
case 0 :
finger1 += [point.x, point.y]
case 1 :
finger2 += [point.x, point.y]
case 2 :
finger3 += [point.x, point.y]
case 3 :
finger4 += [point.x, point.y]
case 4 :
finger5 += [point.x, point.y]
default :
break
}
}
}
}
}

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesEnded(touches, with: event)
endTime = getCurrentMillis()
gesture?.isEnabled = false

for touch in touches {
for (index,finger) in fingers.enumerated() {
if let finger = finger, finger == String(format: "%p", touch) {
fingers[index] = nil
break
}
}
}

direction[0] = ""
direction[1] = ""
direction[2] = ""
direction[3] = ""
direction[4] = ""

if finger1.count != 0 {
direction[0] = GestureRecognizer(coordinates: finger1, index: 0)
}
if finger2.count != 0 {
direction[1] = GestureRecognizer(coordinates: finger2, index: 1)
}
if finger3.count != 0 {
direction[2] = GestureRecognizer(coordinates: finger3, index: 2)
}
if finger4.count != 0 {
direction[3] = GestureRecognizer(coordinates: finger4, index: 3)
}
if finger5.count != 0 {
direction[4] = GestureRecognizer(coordinates: finger5, index: 4)
}

if Int64(endTime - startTime) < 400 {
// HERE I TEST MY GESTURES
}
}

func increaseValue() -> Int {
// HERE I TEST FOR LONG PRESS
else if !finger1.isEmpty && abs(finger1[finger1.count - 2] - finger1[0]) >= 40 && abs(finger1[1] - finger1[finger1.count - 1]) >= 40 {

gesture = XMCircleGestureRecognizer(midPoint: self.view.center, target: self, action: #selector(ViewController.rotateGesture(recognizer:)))
self.view.addGestureRecognizer(gesture!)

}
return value
}

func rotateGesture(recognizer:XMCircleGestureRecognizer)
{
StatusLabel.text = ""

if let rotation = recognizer.rotation {
currentValue += rotation.degrees / 360 * 100
StatusLabel.text = StatusLabel.text! + String(format:"Value: %.2f%%", currentValue)
}

if let angle = recognizer.angle {
StatusLabel.text = StatusLabel.text! + "\n" + String(format:"Angle: %.2f%", angle.degrees)
}

if let distance = recognizer.distance {
StatusLabel.text = StatusLabel.text! + "\n" + String(format:"Distance: %.0f%", distance)
}

}

最佳答案

这对我有用:

    let gesture = XMCircleGestureRecognizer(midPoint: self.view.center, target: self, action: #selector(ViewController.rotateGesture(recognizer:)))
self.view.addGestureRecognizer(gesture)
gesture.isEnabled = true //or false

关于ios - 如何禁用 "gesture recognizer"(XMCircleGestureRecognizer)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45082975/

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