Ich arbeite an einer Tastaturerweiterung für iOS. Allerdings habe ich einige seltsame Probleme mit Animationen/Ebenen, die nicht sofort auf der linken Seite des Bildschirms erscheinen. Ich benutze Ebenen/Animationen, um eine "Tooltip" anzuzeigen, wenn der Benutzer eine Taste drückt. Für alle Tasten außer A und Q werden die QuickInfos sofort angezeigt, aber für diese beiden Tasten scheint es eine leichte Verzögerung zu geben, bevor die Ebene und die Animation erscheinen. Dies geschieht nur beim Aufsetzen, wenn ich in den Q- oder A-Trefferbereich gleite, werden die Tooltips sofort gerendert. Mein Debugging zeigt, dass der Code für alle Schlüssel genau gleich ist, aber für diese beiden Schlüssel hat er keine unmittelbare Wirkung.Animation Verzögerung auf der linken Seite des Bildschirms in iOS Tastaturerweiterung
Haben Sie irgendwelche Ideen, wenn es am linken Bildschirmrand etwas Besonderes gibt, das dieses Verhalten verursachen könnte? Oder mache ich etwas Dummes, das die Ursache dafür sein könnte?
Dies ist Teil meiner Berührung Handhabung Code, der die Werkzeugspitze Rendering auslöst:
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
if(!shouldIgnoreTouches()) {
for touch in touches {
let location = (touch).locationInView(self.inputView)
// pass coordinates to offset service to find candidate keys
let keyArray = keyOffsetService.getKeys(_keyboardLayout!, location: location)
let primaryKey = keyArray[0]
if primaryKey.alphaNumericKey != nil {
let layers = findLayers(touch)
if layers.keyLayer != nil {
graphicsService.animateKeyDown(layers.keyLayer as! CATextLayer, shieldLayer: layers.shieldLayer)
_shieldsUp.append((textLayer:layers.keyLayer, shieldLayer:layers.shieldLayer))
}
}
}
}
}
Animation Code:
func animateKeyDown(layer:CATextLayer, shieldLayer:CALayer?) {
if let sLayer = shieldLayer {
keyDownShields(layer, shieldLayer: sLayer)
CATransaction.begin()
CATransaction.setDisableActions(true)
let fontSizeAnim = CABasicAnimation(keyPath: "fontSize")
fontSizeAnim.removedOnCompletion = true
fontSizeAnim.fromValue = layer.fontSize
fontSizeAnim.toValue = layer.fontSize * 0.9
layer.fontSize = layer.fontSize * 0.9
let animation = CABasicAnimation(keyPath: "opacity")
animation.removedOnCompletion = true
animation.fromValue = layer.opacity
animation.toValue = 0.3
layer.opacity = 0.3
let animGroup = CAAnimationGroup()
animGroup.animations = [fontSizeAnim, animation]
animGroup.duration = 0.01
layer.addAnimation(animGroup, forKey: "down")
CATransaction.commit()
}
}
unhide Tooltip Schicht:
private func keyDownShields(layer:CATextLayer, shieldLayer:CALayer) {
shieldLayer.hidden = false
shieldLayer.setValue(true, forKey: "isUp")
shieldLayer.zPosition = 1
shieldLayer.removeAllAnimations()
layer.setValue(true, forKey: "isUp")
}
Danke, das macht Sinn. Ich vermute das Verhalten hat sich in iOS10 geändert, da das Problem dort verschwunden ist. – Malakim
Ich habe immer noch dieses Problem auf meinem iPhone 6s iOS 11 Version keine Ahnung, wie 3D Touch in meiner App deaktivieren? – Netero
@Netero, soweit ich weiß - können Sie nicht. Zumindest konnten wir nie etwas dagegen tun. – Malakim