UIView 在用户交互后消失

     2023-03-11     269

关键词:

【中文标题】UIView 在用户交互后消失【英文标题】:UIView disappears after user interaction 【发布时间】:2016-11-12 17:24:53 【问题描述】:

每当我单击视图内的文本字段,然后单击另一个文本字段时,视图就会消失。奇怪...有人可以帮忙吗?

我使用 facebook pop 为视图设置动画。这是我的动画引擎代码: 导入 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
        )
    


最后是我的层次结构和选项:(我的视图名称是 emailLoginVCView)。此外,当我单击另一个文本字段进行调试时,我设置了一个断点,因此我得到了以下信息:enter image description here

【问题讨论】:

有导航栏 我猜exitTapped被某种方式调用了。闯入它以(取消)确认。 没有导航栏,还有@shallowThought 什么意思? exitTapped 将视图移出屏幕。我假设在您实际上不想调用它的情况下无意中调用它。在exitTapped 中设置断点,以便在调用时仔细检查。 它没有改变任何东西,谢谢 【参考方案1】:

    我有一个约束,将登录视图的中心与主屏幕的中心绑定

    当我创建 AnimationEngine 时,我将那个约束传递给它,并将其 constant 设置为 offScreenRightPosition.x

    当我打开电子邮件登录表时,我并没有更改约束的常量;我只是在改变视图的位置

    这意味着自动布局认为它应该仍然在屏幕外

    当第二个文本字段变为活动状态时,这会以某种方式触发自动布局以重新评估约束,并且它会看到登录视图的位置与约束所说的不匹配......

    自动布局将其移出屏幕

所以如果我在emailTapped(_:) 中添加这个,问题就会消失 :)

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

【讨论】:

关闭并重新打开应用后 UIView 消失 [自定义 UIView 类别]

】关闭并重新打开应用后UIView消失[自定义UIView类别]【英文标题】:UIViewdisappearsaftercloseandreopentheapp[customUIViewcategory]【发布时间】:2014-07-1701:04:19【问题描述】:我创建了一个UIView类别来轻松绘制,而无需创建UIView的子类。问题... 查看详情

在 UIView 动画期间难以允许用户交互

】在UIView动画期间难以允许用户交互【英文标题】:DifficultyallowinguserinteractionduringUIViewanimation【发布时间】:2014-08-2423:01:40【问题描述】:我正在努力弄清楚如何在视图动画化时允许用户与它进行交互。情况如下:我有一个UIView... 查看详情

即使在采取响应操作后,UIAlertView 也不会消失

...我的UIAlertView中,我想在按下“确定”按钮时打开另一个UIView。但问题是,即使在UIView显示后,警报仍保留在屏幕中,一旦消失,UIView似乎已被禁用。UIAlertView*al 查看详情

UIView 改变方向后消失

】UIView改变方向后消失【英文标题】:UIViewdisappearsafterorientationchange【发布时间】:2011-08-3109:49:08【问题描述】:我有当前的问题:从NSObject我正在创建/加载和动画视图:[UIViewbeginAnimations:@"slidein"context:nil];[UIViewsetAnimationDelegate:se... 查看详情

在 UIView.animateWithDuration() 期间启用手势识别器的用户交互

】在UIView.animateWithDuration()期间启用手势识别器的用户交互【英文标题】:EnableuserinteractionforgesturerecognizerduringUIView.animateWithDuration()【发布时间】:2015-06-0720:37:35【问题描述】:我有一个包含多个矩形子视图(B)的视图(A)。这些子... 查看详情

用户交互后刷新屏幕

...用程序。我有这样的代码:-(void)buttonAction:(UIButton*)senderUIView*figure=(UIView*)[figuresobjectAtIndex:sender.tag];[figure.layerse 查看详情

添加三个子视图后工具栏消失

...好,我正在尝试将集合视图中的项目添加到同一屏幕上的uiview。当用户点击我找到的一个单元格并将其放入下面的mycreationview时(我还希望用户在这些添加的uiimages周围移动)。而且我在顶部有一个工具栏可以返回等。现在,当... 查看详情

UICollectionviewcell 在启动交互移动并使用自定义布局重新排序后消失

】UICollectionviewcell在启动交互移动并使用自定义布局重新排序后消失【英文标题】:UICollectionviewcellsdisappearafterinitiatinginteractivemovementandre-orderwithcustomlayout【发布时间】:2016-09-1915:47:52【问题描述】:我有一个带有自定义布局的UIC... 查看详情

UITableView 部分在设备旋转后失去交互

...发布时间】:2011-10-1710:48:47【问题描述】:我有一个带有UIView子类的UIViewController作为子视图,这里添加了一个UITableView作为该UIView的子视图,如下所示:UIViewController-UIView--UITab 查看详情

在 iOS 模拟器中进行多次交互后,UIPoover 延迟消失

】在iOS模拟器中进行多次交互后,UIPoover延迟消失【英文标题】:UIPopoverdelaytodisappearaftermuchinteractioniniOSSimulator【发布时间】:2013-03-3016:15:50【问题描述】:我正在使用monoTouch来编写一个带有UITextField的应用程序,该应用程序显示... 查看详情

UIView.animate() 问题

】UIView.animate()问题【英文标题】:UIView.animate()issue【发布时间】:2021-03-2015:50:40【问题描述】:我有一个代码,其中UI元素在用户交互后更改。我使用UIView.animate()来刷新用户界面。代码很简单:UIView.animate(withDuration:1.0)self.fadeIn(... 查看详情

将 UIView 滑动到一边,让他消失 - ios

】将UIView滑动到一边,让他消失-ios【英文标题】:swipeUIViewtothesideandmakehimdisappear-ios【发布时间】:2016-03-0123:40:47【问题描述】:我想从中心向左或向右滑动一些UIView,但在边缘之后我想让视图消失。滑动应该由握住手指的位置... 查看详情

导航栏中的iOS UIButton在执行变换动画后消失

...时旋转它来动画从“+”按钮到“X”按钮的转换。当我在UIView上使用标准按钮时,一切都很好。我正在使用以下代码:UIView.animateWith 查看详情

UIView - “用户交互启用”父级为假但子级为真?

】UIView-“用户交互启用”父级为假但子级为真?【英文标题】:UIView--"userinteractionenabled"falseonparentbuttrueonchild?【发布时间】:2011-05-0417:18:35【问题描述】:似乎父视图上的userInteractionEnabled=NO将阻止所有子视图上的用户交... 查看详情

iPhone UIView:是不是可以仅在子视图上启用用户交互?

】iPhoneUIView:是不是可以仅在子视图上启用用户交互?【英文标题】:IPhoneUIView:Isitpossibletoenableuserinteractiononlyonsubviews?iPhoneUIView:是否可以仅在子视图上启用用户交互?【发布时间】:2010-04-3011:41:18【问题描述】:我创建了一个... 查看详情

Swift:动画后将 UIView 的帧重置为其约束

】Swift:动画后将UIView的帧重置为其约束【英文标题】:Swift:ResetframeofaUIViewtoitsconstraintsafteranimation【发布时间】:2018-01-1700:30:32【问题描述】:我正在使用在viewDidLoad中以编程方式添加的约束来设置UIImageView。稍后,在用户与屏... 查看详情

iOS:UIView 阻止用户交互,但不是子视图

】iOS:UIView阻止用户交互,但不是子视图【英文标题】:iOS:UIViewblockstheuserinteractionbutnotit\'ssubview【发布时间】:2016-06-2710:19:40【问题描述】:我正在尝试自定义UIPickerView我有一个UIView的子类,它是mainView。还有一个用于模糊或变... 查看详情

界面旋转的 UIView 到底做了啥?

】界面旋转的UIView到底做了啥?【英文标题】:WhatexactlyisdonetoaUIViewoninterfacerotation?界面旋转的UIView到底做了什么?【发布时间】:2012-09-2506:11:43【问题描述】:有人能解释一下iOS在界面旋转方面做了什么吗?我的一个视图在旋... 查看详情