2015-08-26 4 views
0

J'utilise deux CGAffineTransforms simples pour redimensionner une UIView circulaire, mais je voudrais pouvoir accéder dynamiquement au rayon dans touchesBegan() pendant que l'animation est en cours et vérifier si il est égal à une certaine valeur à ce moment-là.Comment accéder au rayon dynamiquement pendant l'animation? (possible pendant CGAffineTransform)

La difficulté est que je dois vérifier le rayon pendant que l'animation est encore en cours. Je ne suis pas complètement vendu sur l'approche CGAffineTransforms, donc je suis plus qu'heureux d'animer le cercle d'une autre manière si cela veut dire pouvoir accéder au rayon. Je vous remercie!

Je ne sais pas comment faire cela. Voici mon code ci-dessous (conseils bienvenus!):

func grow() { 

    UIView.animateWithDuration(2.3, delay: 0.0, 
     options: UIViewAnimationOptions.CurveEaseIn, 
     animations: { 
      self.circle2.transform = CGAffineTransformMakeScale(1.5, 1.5) 
     }, 
     completion: ({ finished in 
      if (finished) { 
       self.shrink() 
      } 
     })) 
} 

func shrink() { 

    UIView.animateWithDuration(2.3, delay: 0.0, 
     options: UIViewAnimationOptions.CurveEaseInOut, 
     animations: { 
      self.circle2.transform = CGAffineTransformMakeScale(0.5, 0.5) 
     }, 
     completion: ({ finished in 
      if (finished) { 
       self.grow() 
      } 
     })) 
} 

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { 
     /* 
     if radius == certain value 
      { 
       //do something 
      } 
     */ 
    } 
+0

duplication possible de [Comment obtenir la taille réelle de CALayer transformé?] (Http://stackoverflow.com/questions/5537586/how-to-get-the-actual-size-of-transformed-calayer) – jtbandes

Répondre

1

D'abord, je recommande de faire cette animation en utilisant une CABasicAnimation simple ou CAKeyframeAnimation, parce que vous pouvez utiliser anim.repeatCount = .infinity plutôt que des gestionnaires d'achèvement qui appellent les uns les autres avant et en arrière.

L'état actuel de l'animation est accessible par circle2.layer.presentationLayer. Comme mentionné in this question, vous pouvez utiliser son frame qui prendra en compte la transformation.

+0

Je vous remercie! C'est parfait - fera l'affaire. – tylersimko