2016-11-12 56 views
0

每当我点击视图内的文本框,然后点击其他文本框,视图就会消失。奇怪......任何人都可以帮忙吗?UIView在用户互动后消失

It's the view in the middle.

我动画用Facebook流行的图。这里是我的动画引擎代码: 进口的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") 
    } 
} 

那么这里就是我的视图 - 控制代码,其中的观点是在里面:

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和选项:(我视图的名称是emailLoginVCView)。此外,当我在调试时,我点击另一个文本字段我设置一个断点,所以我得到了这个信息:enter image description here

enter image description here enter image description here

+0

有任何导航栏 –

+0

我客串'莫名其妙叫exitTapped'is。分解成(不)确认。 – shallowThought

+0

没有导航栏,和@shallowThought是什么意思? – Kouder

回答

0
  1. 我有一个绑定登录视图的中心与中心的约束主屏幕

  2. ,当我创建AnimationEngine,我传递给它的约束,并设置其constantoffScreenRightPosition.x

  3. 当我调出电子邮件登录表时,我没有改变约束的常量;我只是改变了看法

  4. 这意味着自动布局认为它应该仍然是屏幕之外

  5. 当第二文本框变为有效的位置,即以某种方式触发自动布局重新评估的约束和它看到登录视图的位置不匹配的约束说它应该是这样....

  6. 自动布局移动它离屏幕

小号o如果我加入这emailTapped(_:),问题消失:)

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