2016-11-12 8 views
0

ビュー内のテキストフィールドをクリックしてから別のテキストフィールドをクリックすると、ビューが消えるたびにUIViewが消えます。奇妙な...誰も助けることができますか?ユーザーインタラクション後にUIViewが消えます

It's the view in the middle.

私はFacebookのポップを使用してビューをアニメーション化。

import UIKit 
import pop 


class LoginVC: UIViewController, UITextFieldDelegate { 

    override var prefersStatusBarHidden: Bool { 
     return true 
    } 

    @IBOutlet weak var emailLoginVCViewConstraint: NSLayoutConstraint! 
    @IBOutlet weak var emailLoginVCView: MaterialView! 
    @IBOutlet weak var emailAddressTextField: TextFieldExtension! 
    @IBOutlet weak var passwordTextField: TextFieldExtension! 

    var animEngine : AnimationEngine! 

    override func viewDidAppear(_ animated: Bool) { 
     self.emailLoginVCView.isUserInteractionEnabled = true 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
     self.view.bringSubview(toFront: emailAddressTextField) 
     self.animEngine = AnimationEngine(constraints: [emailLoginVCViewConstraint]) 
     self.emailAddressTextField.delegate = self 
     self.passwordTextField.delegate = self 
     emailAddressTextField.allowsEditingTextAttributes = false 
    } 


    func textFieldShouldReturn(_ textField: UITextField) -> Bool { 
     if (textField === emailAddressTextField) { 
      passwordTextField.becomeFirstResponder() 
     } else if (textField === passwordTextField) { 
      passwordTextField.resignFirstResponder() 
     } else { 
      // etc 
     } 

     return true 
    } 

    @IBAction func emailTapped(_ sender: AnyObject) { 
     AnimationEngine.animateToPosisition(emailLoginVCView, position: AnimationEngine.screenCenterPosition, completion: { (POPAnimation, Bool) 
      in 
     }) 
    } 

    @IBAction func exitTapped(_ sender: AnyObject) { 
     AnimationEngine.animateToPosisition(emailLoginVCView, position: AnimationEngine.offScreenRightPosition, completion: { (POPAnimation, Bool) 
      in 
     }) 
    } 

} 

がここに最終私hierchyとオプションです:ビューが内側であるところの私のViewControllerコードは、ここでは次に 輸入のUIKit 輸入ポップ

class AnimationEngine { 

    class var offScreenRightPosition: CGPoint { 
     return CGPoint(x: UIScreen.main.bounds.width + 250,y: UIScreen.main.bounds.midY - 75) 
    } 

    class var offScreenLeftPosition: CGPoint{ 
     return CGPoint(x: -UIScreen.main.bounds.width,y: UIScreen.main.bounds.midY - 75) 
    } 

    class var offScreenTopPosition: CGPoint{ 
     return CGPoint(x: UIScreen.main.bounds.midX,y: -UIScreen.main.bounds.midY) 
    } 

    class var screenCenterPosition: CGPoint { 
     return CGPoint(x: UIScreen.main.bounds.midX, y: UIScreen.main.bounds.midY - 75) 
    } 

    let ANIM_DELAY : Int = 1 
    var originalConstants = [CGFloat]() 
    var constraints: [NSLayoutConstraint]! 

    init(constraints: [NSLayoutConstraint]) { 

     for con in constraints { 
      originalConstants.append(con.constant) 
      con.constant = AnimationEngine.offScreenRightPosition.x 
     } 

     self.constraints = constraints 
    } 

    func animateOnScreen(_ delay: Int) { 

     let time = DispatchTime.now() + Double(Int64(Double(delay) * Double(NSEC_PER_SEC)))/Double(NSEC_PER_SEC) 

     DispatchQueue.main.asyncAfter(deadline: time) { 

      var index = 0 
      repeat { 
       let moveAnim = POPSpringAnimation(propertyNamed: kPOPLayoutConstraintConstant) 
       moveAnim?.toValue = self.originalConstants[index] 
       moveAnim?.springBounciness = 8 
       moveAnim?.springSpeed = 8 

       if (index < 0) { 
        moveAnim?.dynamicsFriction += 10 + CGFloat(index) 
       } 

       let con = self.constraints[index] 
       con.pop_add(moveAnim, forKey: "moveOnScreen") 

       index += 1 

      } while (index < self.constraints.count) 
     } 

    } 

    class func animateToPosisition(_ view: UIView, position: CGPoint, completion: ((POPAnimation?, Bool) -> Void)!) { 
     let moveAnim = POPSpringAnimation(propertyNamed: kPOPLayerPosition) 
     moveAnim?.toValue = NSValue(cgPoint: position) 
     moveAnim?.springBounciness = 8 
     moveAnim?.springSpeed = 8 
     moveAnim?.completionBlock = completion 
     view.pop_add(moveAnim, forKey: "moveToPosition") 
    } 
} 

されています。ここに私のアニメーションエンジンコードです(私のビューの名前はemailLoginVCViewです)。また、私は私がブレークポイントを設定し、別のテキストフィールドをクリックしたときに、私はこの情報だデバッグ時:私はセンターでのログインビューの中心をバインドする制約を持つenter image description here

enter image description here enter image description here

+0

は、任意のナビゲーションバー –

+0

をそこに持っている私は '何とかと呼ばれるexitTapped'isをgues。それに侵入して確認する。 – shallowThought

+0

ナビゲーションバーがありません、そして@shallowThoughtとはどういう意味ですか? – Kouder

答えて

0
  1. をメイン画面の

  2. IはAnimationEngineを作成するときに、私はその制約を渡し、それがoffScreenRightPosition.x

  3. であるために、その constantを設定
  4. メールのログインシートを表示するとき、私は制約の定数を変更していません。私はちょうど自動レイアウトは、まだ

  5. オフスクリーンことになっていると考えて二テキストフィールドがアクティブになると、それは何らかの形で再評価制約に自動レイアウトをトリガーだことを意味しているビュー

  6. の位置を変更しています、そしてそれは、ログインビューの位置は制約が、それはそう....

  7. 自動レイアウトが

Sオフスクリーンにそれを動かすべきであると言うものと一致していないことを見ています私はemailTapped(_:)でこれを追加する場合、O、問題が消える:)

@IBAction func emailTapped(_ sender: AnyObject) { AnimationEngine.animateToPosisition(emailLoginVCView, position: AnimationEngine.screenCenterPosition, completion: { (POPAnimation, Bool) in self.emailLoginVCViewConstraint.constant = 0 }) }

関連する問題