【问题标题】:Prevent animation from triggering if focus goes from a UITextField to another如果焦点从 UITextField 转到另一个,则防止触发动画
【发布时间】:2014-08-11 19:04:34
【问题描述】:

我目前正在尝试为应用程序制作登录屏幕。它由一个大logo组成,下面是两个用于登录和密码的文本字段,以及一个按钮。

当文本字段有焦点时,有nice animation that makes all the elements go up,因此它们不会被键盘隐藏,还有the logo vanishes。当文本字段失去焦点时,一切都会恢复到正常状态。

我的问题是从一个文本字段转到另一个文本字段时。两个动画都触发了,所以logo短暂的出现和消失,不是很专业。

homever 的键盘并没有消失又出现,所以我猜 Apple 使用了一个特殊的技巧来防止它。

我怎样才能用我的动画实现同样的效果?

【问题讨论】:

    标签: ios objective-c uitextfield uianimation


    【解决方案1】:

    每次键盘出现和消失时都会调用一个方便的通知。 只需在viewDidLoadviewWillAppear 中注册这些通知,然后 您可以将动画逻辑移动到方法 keyboardWillShowkeyboardWillHide 中。 在那里你可以防止动画重复

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWillShow)
                                                 name:UIKeyboardWillShowNotification
                                               object:nil];
    
    [[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardWillHide)
                                             name:UIKeyboardWillHideNotification
                                           object:nil];
    

    【讨论】:

    • 谢谢,效果很好!您是否有任何关于使视图与键盘速度完全相同的提示?我在这个网站上找到了一些答案,但没有一个真正有效。
    • 是的,我确实这样做了,但它确实需要您将 textFields 放在 scrollView 上,而不是在动画块中对其进行动画处理。您只需设置滚动视图的内容偏移量,即可获得流畅的动画。更简单的是,看看这个子类的 scrollView 助手。只需下载文件并将其添加到您的项目中,并将滚动视图的子类设置为 TPKeyboardAvoiding scrollView,您就会在键盘出现时获得流畅的动画。
    【解决方案2】:

    您可以根据键盘外观制作动画,即,如果您的键盘出现,则制作您的动画,当键盘隐藏时,一切都会变得正常。

    在你的类的 ViewDidLoad 方法中设置监听关于键盘的消息:

    // Listen for keyboard appearances and disappearances 
    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(keyboardDidShow:)
                                                 name:UIKeyboardDidShowNotification
                                               object:nil];
    
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardDidHide:)
                                                 name:UIKeyboardDidHideNotification
                                               object:nil];
    

    然后将以下方法添加到您的代码中。在这些方法中,您可以处理动画。

    - (void)keyboardDidShow: (NSNotification *) notif{
        // Animate here
    }
    
    - (void)keyboardDidHide: (NSNotification *) notif{
        // Back to normal
    }
    

    【讨论】:

      猜你喜欢
      • 2012-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多