2017-10-12 5 views
0

Je lance une animation après que l'utilisateur appuie sur un logo. Ceci est l'animation:Swift: L'animation iOS s'arrête après l'affichage du MessageController (page de message d'iOS)

func rightRotateView(targetView: UIView, duration: Double = 5) { 

    UIView.animate(withDuration: duration, delay: 0.0, options: [.repeat, .curveLinear] , animations: { 
     targetView.transform = targetView.transform.rotated(by: CGFloat.pi * 5) 

    }) { finished in 
     // self.rightRotateView(targetView: targetView) 
    } 
} 

Après 3 secondes d'une pression longue (dans ce temps, l'animation doit encore fonctionner), je présente le contrôleur de message pour l'utilisateur:

if MFMessageComposeViewController.canSendText() == true { 
     print(self.urgentNumber) 
     let recipients:[String] = ["\(self.urgentNumber as! String)"] 
     self.messageController.messageComposeDelegate = self as? MFMessageComposeViewControllerDelegate 
     self.messageController.recipients = recipients 
     self.messageController.body = "Hey,\nmy longitude: \(self.userLocation.coordinate.longitude) \nmy latitude: \(self.userLocation.coordinate.latitude)" 

     self.present(self.messageController, animated: true, completion: nil) 


    } else { 
     //handle text messaging not available 

    } 

quand je appuyez sur le bouton annuler dans le contrôle des messages, je retourne à la page d'animation, mais l'animation cesse de fonctionner. J'ai essayé de relancer l'animation après le présent, et dans le

func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith result: MessageComposeResult) { 

} 

Mais cela n'a pas fonctionné.

Répondre

0

J'ai trouvé le problème, il suffit de refaire le même animation dans la réalisation, (vous pouvez utiliser CABasicAnimation ou simplement UIView.animate):

func rightRotateView(targetView: UIView, duration: Double = 5) { 

    UIView.animate(withDuration: duration, delay: 0.0, options: [.repeat, .curveLinear] , animations: { 
     targetView.transform = targetView.transform.rotated(by: CGFloat.pi * 5) 

    }) { finished in 
     let anim = CABasicAnimation(keyPath:"transform.rotation") 
     anim.fromValue = 0.000 
     anim.toValue = 360.0 
     anim.speed = 0.001 
     anim.repeatCount = .infinity 
     targetView.layer.add(anim, forKey: "transform.rotation") 
    } 

} 
+0

J'ai essayé ceci, et j'ai vu que l'animation venait de redémarrer quand j'ai ajouté cette implémentation. Si l'animation est au milieu, elle redémarrera, donnant un effet saccadé. Y at-il un moyen de contourner cela? – ArielSD

-1

pour cette utilisation CABasicAnimation (KeyPath: "transform.rotation")

+0

une réponse plus détaillée serait très appréciée. – mahdi

+0

de toute façon cela n'a pas fonctionné – mahdi

+0

Plus de contexte sur ce serait vraiment utile - j'ai un problème similaire. Merci! – ArielSD