2016-05-25 5 views
2

Ich animiere einige Tasten in swift, um sich für immer zufällig über die Ansicht zu bewegen, jedoch bewegen sich die Schaltflächen "Ziel" nicht. Um auf die Schaltfläche zu klicken, müssen Sie auf die ursprüngliche Position klicken, an der sie erstellt wurde, auch wenn es sich möglicherweise um die andere Seite des Bildschirms handelt.Wie bewegt man ein Tastenziel/eine Gestenerkennung, wenn die Schaltfläche in swift (iOS) animiert wird?

Hat jemand einfache Anweisungen, wie man die Knöpfe mit dem Knopf bewegt?

func circlePath(view: UIButton, pathDuration: Double){ 
    //create an animation to follow a circular path 
    let pathAnimation: CAKeyframeAnimation = CAKeyframeAnimation(keyPath: "position") 
    //interpolate the movement to be more smooth 
    pathAnimation.calculationMode = kCAAnimationPaced 
    pathAnimation.repeatCount = .infinity 
    //no ease in/out to have the same speed along the path 
    pathAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear) 
    //the paths circular animation is proportional its size 
    pathAnimation.duration = pathDuration 
    //The circle to follow will be inside the circleContainer frame. 
    //it should be a frame around the center of your view to animate. 
    //do not make it to large, a width/height of 3-4 will be enough. 
    let curvedPath: CGMutablePathRef = CGPathCreateMutable() 
    let circleContainer: CGRect = CGRectInset(view.frame, 23, 23) 
    CGPathAddEllipseInRect(curvedPath, nil, circleContainer) 
    //add the path to the animation 
    pathAnimation.path = curvedPath 
    //add animation to the view's layer 
    view.layer.addAnimation(pathAnimation, forKey: "myCircleAnimation") 
} 
+0

Können Sie den von Ihnen verwendeten Animationscode teilen? – Wez

+1

Button Ziel ist keine separate Sache, die sich bewegen sollte. Die Schaltfläche muss nicht korrekt an der Animationsposition platziert sein. – Wolverine

+0

Ich habe den Code zur Frage hinzugefügt, wie sich die Schaltflächen bewegen. – user3411006

Antwort

1

Verwenden Sie nicht den Begriff "Ziel", um den Bereich zu bezeichnen, auf den Abgriffe reagieren. "Ziel" hat eine spezifische Bedeutung in Bezug auf Schaltflächen, und das ist es nicht.

Nennen wir es das "Hit-Rechteck".

Kern Animation animiert nicht wirklich die Objekte über den Bildschirm. Es erstellt eine "Präsentationsschicht", die das Aussehen der bewegten Objekte angibt, aber die Objekte selbst nicht animieren.

So können Sie nicht Tasten haben reagieren auf Taps während "Mid-Flight" in einer Animation.

Stattdessen müssen Sie in der Superansicht (oder der Ebene, die die zu animierende Ebene enthält, eine Tip-Geste erkennen), wenn Sie CAAnimation tun. Dann können Sie die Methode hitTest von verwenden die Darstellungsschicht der animierten Ebene, um zu testen, ob sich der Tap innerhalb der Grenzen der zu animierenden Ebene befand.

Ich habe ein Projekt auf Github, die diese Technik zeigen. Es heißt iOS-CAAnimation-group-demo (link.) Es ist in Objective-C geschrieben, aber die Technik ist die gleiche, unabhängig von der Sprache, so sollte es Ihnen eine Vorstellung davon geben, wie Sie vorgehen.