2016-05-12 14 views
3

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") 
} 

Image of the keyboard with tooltip

Antwort

2

Dies wird durch eine Funktion in iOS 9 verursacht, die es dem Benutzer ermöglicht, zwischen Apps zu wechseln, indem er beim Streichen nach rechts den linken Rand des Bildschirms drückt.

Sie können dies ausschalten, indem Sie 3D Touch deaktivieren, aber das ist kaum eine Lösung.

Mir ist keine API bekannt, mit der Sie dieses Verhalten überschreiben können.

+0

Danke, das macht Sinn. Ich vermute das Verhalten hat sich in iOS10 geändert, da das Problem dort verschwunden ist. – Malakim

+0

Ich habe immer noch dieses Problem auf meinem iPhone 6s iOS 11 Version keine Ahnung, wie 3D Touch in meiner App deaktivieren? – Netero

+0

@Netero, soweit ich weiß - können Sie nicht. Zumindest konnten wir nie etwas dagegen tun. – Malakim