gpt4 book ai didi

ios - 对 UIButton 的 3D Touch 执行操作的最佳方式

转载 作者:搜寻专家 更新时间:2023-10-31 19:33:15 24 4
gpt4 key购买 nike

我在 UIViewController 中有许多 UIButton 实例,我想在按下这些按钮中的任何一个时执行一些操作(一直向下) ),我不知道这里的确切术语(也许是强制触摸?)。

因此,当 UIButton 受到压力时,我想通过振动提供触觉反馈、更改按钮图像源以及做一些其他事情。然后当压力被释放时,我想将按钮图像源恢复到正常状态并做更多的事情。

最简单的方法是什么?

我应该像下面那样制作我自己的自定义 UIButton 还是有可以覆盖 3D 触摸“按下”和“释放”的方法。

到目前为止,这是我的自定义 UIButton 代码。我是否应该通过反复试验来确定最大力应该是多少?另外,如何以最简单的方式更改每个按钮的图像源?

import AudioToolbox
import UIKit

class customButton : UIButton {
override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
for touch in touches {
print("% Touch pressure: \(touch.force/touch.maximumPossibleForce)");
if touch.force > valueThatIMustFindOut {
AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))
// change image source
// call external function
}
}
}

override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
print("Touches End")
// restore image source
// call external function
}
}

请注意,我是 Swift 的新手,所以我想尽可能使用 Xcode 中的图形界面来创建用户界面。所以我想避免从代码创建 UI。

最佳答案

至于force touch - 你需要先检测它是否可用:

func is3dTouchAvailable(traitCollection: UITraitCollection) -> Bool {
return traitCollection.forceTouchCapability == UIForceTouchCapability.available
}

if(is3dTouchAvailable(traitCollection: self.view!.traitCollection)) {
//...
}

然后在例如touchesMoved 它将作为 touch.forcetouch.maximumPossibleForce

提供
func touchMoved(touch: UITouch, toPoint pos: CGPoint) {
let location = touch.location(in: self)
let node = self.atPoint(location)

//...
if is3dTouchEnabled {
bubble.setPressure(pressurePercent: touch.force / touch.maximumPossibleForce)
} else {
// ...
}
}

这是带有代码示例的更详细的示例: http://www.mikitamanko.com/blog/2017/02/01/swift-how-to-use-3d-touch-introduction/

用触觉/触觉反馈对这种“用力触摸”使用react也是一种很好的做法,这样用户就会体验到这种触摸:

let generator = UIImpactFeedbackGenerator(style: .heavy)
generator.prepare()

generator.impactOccurred()

您可能想查看这篇文章以了解详细信息: http://www.mikitamanko.com/blog/2017/01/29/haptic-feedback-with-uifeedbackgenerator/

关于ios - 对 UIButton 的 3D Touch 执行操作的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40827691/

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