change button down effect for onScreenButtonView

This commit is contained in:
TrueZhuangjia committed 2024-11-03 23:31:17 +08:00
1 parent f1811ca53d
commit 141c9ee2ab
1 file changed
+25 -30
+25 -30
View File
@@ -24,7 +24,7 @@ import UIKit
// private let originalBackgroundColor: UIColor // private let originalBackgroundColor: UIColor
private var storedLocation: CGPoint = .zero private var storedLocation: CGPoint = .zero
private let minimumBorderAlpha: CGFloat = 0.19 private let minimumBorderAlpha: CGFloat = 0.19
private var defaultBorderColor: CGColor = UIColor(white: 0.2, alpha: 0.3).cgColor
@objc init(keyString: String, keyLabel: String) { @objc init(keyString: String, keyLabel: String) {
self.keyString = keyString self.keyString = keyString
@@ -63,13 +63,15 @@ import UIKit
self.backgroundAlpha = 0.5 self.backgroundAlpha = 0.5
} }
var borderAlpha = 1.5 * self.backgroundAlpha // setup default border from self.backgroundAlpha
var borderAlpha = 1.15 * self.backgroundAlpha
if(borderAlpha < minimumBorderAlpha){ if(borderAlpha < minimumBorderAlpha){
borderAlpha = minimumBorderAlpha borderAlpha = minimumBorderAlpha
} }
defaultBorderColor = UIColor(white: 0.2, alpha: borderAlpha).cgColor
self.layer.borderColor = defaultBorderColor
self.backgroundColor = UIColor(white: 0.2, alpha: self.backgroundAlpha - 0.18) // offset to be consistent with onScreen controller layer opacity self.backgroundColor = UIColor(white: 0.2, alpha: self.backgroundAlpha - 0.18) // offset to be consistent with onScreen controller layer opacity
self.layer.borderColor = UIColor(white: 0.2, alpha: borderAlpha).cgColor
} }
@objc public func resizeButtonView(){ @objc public func resizeButtonView(){
@@ -119,18 +121,21 @@ import UIKit
label.translatesAutoresizingMaskIntoConstraints = false // enable auto alignment for the label label.translatesAutoresizingMaskIntoConstraints = false // enable auto alignment for the label
self.translatesAutoresizingMaskIntoConstraints = true // this is mandatory to prevent unexpected key view location change self.translatesAutoresizingMaskIntoConstraints = true // this is mandatory to prevent unexpected key view location change
var borderAlpha = 1.5 * self.backgroundAlpha
// reset to default border
self.layer.borderWidth = 1
var borderAlpha = 1.15 * self.backgroundAlpha
if(borderAlpha < minimumBorderAlpha){ if(borderAlpha < minimumBorderAlpha){
borderAlpha = minimumBorderAlpha borderAlpha = minimumBorderAlpha
} }
// if(self.backgroundAlpha * ) defaultBorderColor = UIColor(white: 0.2, alpha: borderAlpha).cgColor
self.layer.borderColor = UIColor(white: 0.2, alpha: borderAlpha).cgColor self.layer.borderColor = defaultBorderColor
self.layer.borderWidth = 1
self.layer.cornerRadius = 20 self.layer.cornerRadius = 20
self.backgroundColor = UIColor(white: 0.2, alpha: self.backgroundAlpha - 0.18) // offset to be consistent with OSC opacity self.backgroundColor = UIColor(white: 0.2, alpha: self.backgroundAlpha - 0.18) // offset to be consistent with OSC opacity
self.layer.shadowColor = UIColor.clear.cgColor // self.layer.shadowColor = UIColor.clear.cgColor
self.layer.shadowRadius = 8 // self.layer.shadowRadius = 8
self.layer.shadowOpacity = 0.5 // self.layer.shadowOpacity = 0.5
addSubview(label) addSubview(label)
@@ -151,17 +156,13 @@ import UIKit
} }
private func buttonDownVisualEffect() { private func buttonDownVisualEffect() {
let spread = 10.2; // 扩散的大小 self.layer.borderWidth = 8.6
let largerRect = self.bounds.insetBy(dx: -spread, dy: -spread) self.layer.borderColor = UIColor(red: 0.5, green: 0.5, blue: 1.0, alpha: 0.80).cgColor
let shadowPath = UIBezierPath(roundedRect: largerRect, cornerRadius: self.layer.cornerRadius) }
self.layer.shadowPath = shadowPath.cgPath
// self.layer.shadowColor = UIColor.systemBlue.withAlphaComponent(0.7).cgColor private func buttonUpVisualEffect() {
self.layer.shadowColor = UIColor(red: 0.5, green: 0.5, blue: 1.0, alpha: 0.80).cgColor self.layer.borderWidth = 1
self.layer.shadowOffset = CGSize.zero self.layer.borderColor = defaultBorderColor
self.layer.shadowOpacity = 1.0
self.layer.shadowRadius = 0.0
self.layer.borderWidth = 0
} }
// Touch event handling // Touch event handling
@@ -174,15 +175,12 @@ import UIKit
if !OnScreenButtonView.editMode { if !OnScreenButtonView.editMode {
// self.backgroundColor = UIColor.systemBlue.withAlphaComponent(0.7) // self.backgroundColor = UIColor.systemBlue.withAlphaComponent(0.7)
self.buttonDownVisualEffect() self.buttonDownVisualEffect()
self.layer.borderWidth = 0
// if the command(keystring contains "+", it's a multi-key command or a quick triggering key, rather than a physical button // if the command(keystring contains "+", it's a multi-key command or a quick triggering key, rather than a physical button
if(self.keyString.contains("+")){ if(self.keyString.contains("+")){
let keyboardCmdStrings = CommandManager.shared.extractKeyStrings(from: self.keyString)! let keyboardCmdStrings = CommandManager.shared.extractKeyStrings(from: self.keyString)!
CommandManager.shared.sendKeyDownEventWithDelay(keyboardCmdStrings: keyboardCmdStrings) // send multi-key command CommandManager.shared.sendKeyDownEventWithDelay(keyboardCmdStrings: keyboardCmdStrings) // send multi-key command
DispatchQueue.main.asyncAfter(deadline: .now() + 0.03) { // reset shadow color immediately 50ms later DispatchQueue.main.asyncAfter(deadline: .now() + 0.03) { // reset shadow color immediately 50ms later
self.layer.shadowColor = UIColor.clear.cgColor self.buttonUpVisualEffect()
self.layer.borderWidth = 1
} }
} }
// if there's no "+" in the keystring, treat it as a regular button: // if there's no "+" in the keystring, treat it as a regular button:
@@ -236,15 +234,12 @@ import UIKit
else{ else{
LiSendKeyboardEvent(CommandManager.keyMappings[self.keyString]!,Int8(KEY_ACTION_UP), 0) LiSendKeyboardEvent(CommandManager.keyMappings[self.keyString]!,Int8(KEY_ACTION_UP), 0)
} }
self.buttonUpVisualEffect()
// self.backgroundColor = self.originalBackgroundColor
self.layer.shadowColor = UIColor.clear.cgColor
self.layer.borderWidth = 1
return; return;
} }
// self.backgroundColor = self.originalBackgroundColor // self.backgroundColor = self.originalBackgroundColor
self.layer.shadowColor = UIColor.clear.cgColor // self.layer.shadowColor = UIColor.clear.cgColor
self.layer.borderWidth = 1 // self.layer.borderWidth = 1
guard let superview = superview else { return } guard let superview = superview else { return }