2016-04-12 1 views
0

Je veux faire une application qui dit bonjour dans le centre de la vue, attend quelques secondes et anime au sommet (un peu comme une vue de connexion que vous verriez dans de nombreuses applications)Comment déplacer du texte dynamique dans iOS?

Peu importe ce que je essayez, je ne peux pas garder le texte centré sur l'axe des x. Pourriez-vous regarder dans mon code et dire quelle est l'erreur?

Merci

// Blur Effect 
    var blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Light) 
    var blurEffectView = UIVisualEffectView(effect: blurEffect) 
    blurEffectView.frame = view.bounds 
    view.addSubview(blurEffectView) 

    // Vibrancy Effect 
    var vibrancyEffect = UIVibrancyEffect(forBlurEffect: blurEffect) 
    var vibrancyEffectView = UIVisualEffectView(effect: vibrancyEffect) 
    vibrancyEffectView.frame = view.bounds 

    // Add label to the vibrancy view 

    vibrancyEffectView.contentView.addSubview(vibrantLabel) 

    vibrantLabel.textAlignment = NSTextAlignment.Center 


    // Add the vibrancy view to the blur view 
    blurEffectView.contentView.addSubview(vibrancyEffectView) 


    UIView.animateWithDuration(1, delay: 1, options: .CurveEaseIn, animations: {() -> Void in 

     self.vibrantLabel.frame = CGRectMake(0, 100, self.vibrantLabel.frame.width, self.vibrantLabel.frame.height) 
     }, completion: {(finished: Bool) -> Void in 
      self.view.alpha = 1 
    }) 
+0

alternativement déplacer la couche de sous-couche. définissez self.vibrantLabel.layer.anchorPoint à {0.5,0.5} puis déplacez simplement le self..vibrantLabel.layer.position = {x, y} –

Répondre

0

Pour résoudre votre problème, juste garder l'origine x de votre étiquette au cours de l'animation. S'il vous plaît essayer cette ligne:

self.vibrantLabel.frame = CGRectMake(self.vibrantLabel.frame.origin.x, 100, self.vibrantLabel.frame.width, self.vibrantLabel.frame.height) 

Vous avez été la mise à l'origine sur l'axe des x à zéro, de sorte que votre étiquette a été aligné à gauche à anime sa vue parent.

+0

Désolé, cela n'a pas fonctionné. Je pense que le problème est avec vibrancyEffectView. Lorsque je n'ajoute pas l'étiquette à vibrancyEffectView en tant que sous-vue, la position de l'étiquette est correcte; Toutefois, lorsque je l'ajoute en tant que sous-vue, l'étiquette par défaut est affichée à gauche de l'écran. –

0

Trouvé la solution. Je devais définir la position initiale dans viewDidLayoutSubviews() puis animer dans viewDidAppear()

@IBOutlet var vibrantLabel: UILabel! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Blur Effect 

    var blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Light) 
    var blurEffectView = UIVisualEffectView(effect: blurEffect) 
    blurEffectView.frame = view.bounds 
    view.addSubview(blurEffectView) 

    // self.vibrantLabel.layer.anchorPoint = (CGPointMake(-0.25, -2.65)) 

    // Vibrancy Effect 
    var vibrancyEffect = UIVibrancyEffect(forBlurEffect: blurEffect) 
    var vibrancyEffectView = UIVisualEffectView(effect: vibrancyEffect) 
    vibrancyEffectView.frame = view.bounds 

    // Add label to the vibrancy view 

    view.addSubview(vibrantLabel) 

    vibrantLabel.textAlignment = NSTextAlignment.Center 

    // Add the vibrancy view to the blur view 
    blurEffectView.contentView.addSubview(vibrancyEffectView) 

} 

override func viewDidLayoutSubviews() { 


    vibrantLabel.center = CGPointMake(view.frame.midX, view.frame.midY) 

} 

override func viewDidAppear(animated: Bool) { 

    UILabel.animateWithDuration(1.25, delay: 1, options: .CurveEaseInOut, animations: { 

     self.vibrantLabel.center = CGPointMake(self.view.frame.midX, 100) 

     }) { (Bool) in 

      print("success") 

    } 


}