swift - 如何在 Spritekit 中实现开关按钮?
问题描述
我正在尝试实现打开/关闭按钮。问题是,如果我多次触摸该位置,应用程序就会冻结。有没有办法实现切换按钮?
// Disabled / Enabled Photo
if (photoSwitch?.contains(location))! {
Sound.play(file: "switch", fileExtension: "mp3", numberOfLoops: 0)
if photoToggle == true {
UserDefaults.standard.set(true, forKey: "photoSwitch")
defaults.synchronize()
photoToggle = false
photoOn?.alpha = 1
photoOff?.alpha = 0
print("on")
} else if photoToggle == false {
UserDefaults.standard.set(false, forKey: "photoSwitch")
defaults.synchronize()
photoToggle = true
photoOn?.alpha = 0
photoOff?.alpha = 1
print("off")
}
}
解决方案
我所做的 2 个假设是您在 touchesBegan 中调用此代码,并且 photoToggle 是在场景级别设置的 Bool。
defaults.synchronize()
Apple 建议不要在每次更改值时调用,它会自动完成
此代码用作切换,并且不会冻结。
private var photoToggle = false
开始接触
if photoSwitch?.contains(location) {
Sound.play(file: "switch", fileExtension: "mp3", numberOfLoops: 0)
UserDefaults.standard.set(!photoToggle , forKey: "photoSwitch")
photoToggle = !photoToggle
photoOn?.isHidden = photoToggle
photoOff?.isHidden = !photoToggle
print(photoToggle ? "on" : "off")
}
推荐阅读
- c++ - 在其他基类中重新定义虚函数
- sql - 根据标志添加/删除 SQL 查询中的两个重复结果
- java - 将文本框的标签放在框上方而不是侧面
- openssl - openssl s_server 是否支持 LDAP starttls 功能?
- javascript - 当从 div 中单击记录时,它必须将所选记录显示到另一个 div
- swift - 更新 pod 后出现“使用未声明的标识符 '__BYTE_ORDER'”错误
- sql - 我可以定义一组表以供以后处理吗?
- java - 如何将 HttpServletRequest 转换为 OAuth2Request 对象?
- ruby - RSpec - 如何测试是否调用了不同的类方法?
- r - 如何在数据框列表中按列找到 1 的最小位置?