【问题标题】:Animating constraints for iOS xibsiOS xibs 的动画约束
【发布时间】:2014-09-25 18:26:04
【问题描述】:

我一直在阅读一些关于在 iOS 开发中使用 xibs 时制作动画的文章。我读到的主要内容是不为框架设置动画,而是为约束设置动画。我在启动时将标签限制在视图的中心,然后将其设置为动画并显示登录文本字段(您看到的典型登录内容)。

我做了这个动画框架,当然当我点击文本字段时,视图将原始约束应用于“我的标题”标签并将其推回其原始中心位置。

如何删除居中约束并添加新约束以编程方式从顶部强制空间?

这是我的动画代码:

[UIView animateWithDuration: 0.8
                      delay: 1.0
     usingSpringWithDamping: 0.8
      initialSpringVelocity: 0.5
                    options: UIViewAnimationOptionCurveEaseOut
                 animations: ^{
                     self.titleLabel.frame = CGRectOffset(self.titleLabel.frame, 0, -self.view.frame.size.height/4.5);
                 } completion: ^(BOOL finished) {
                     if (finished)
                     {
                         [UIView animateWithDuration: 0.8
                                               delay: 0.3
                              usingSpringWithDamping: 0.8
                               initialSpringVelocity: 0.5
                                             options: UIViewAnimationOptionCurveEaseInOut
                                          animations: ^{

                                              self.userIdTextField.alpha = 1.0;
                                              self.userPasswordTextField.alpha = 1.0;
                                              self.loginButton.alpha = 1.0;

                                          } completion: ^(BOOL finished) {
                                          }];
                     }
                 }];

【问题讨论】:

    标签: ios objective-c animation interface-builder xib


    【解决方案1】:

    这比您想象的要容易得多。您可以为约束创建 IBOutlet 并更改其常量值,而不是删除和重新添加。

    从您的 Storyboard 中,控制并拖动您的约束到您的视图控制器的源代码中。这将为您提供创建指向约束的 IBOutlet 的选项。

    那么您在 UIView 动画中所要做的就是更改约束 constant 属性的值。

    这是一个自动布局约束出口的例子:

    @property (weak, nonatomic) IBOutlet NSLayoutConstraint *myViewHeight;
    

    下面是一个通过改变约束常量来改变视图高度的动画代码示例:

    [UIView animateWithDuration:0.5
                      delay: 0.0
                    options: UIViewAnimationOptionTransitionNone
                 animations:^{
                         _myViewHeight.constant += 20.0f;
                         [self.view layoutIfNeeded];
                     }
                completion:nil];
    

    这可能不是您想要做的,但您应该能够以这种方式修改您的约束以完成工作。

    【讨论】:

      【解决方案2】:

      必须以不同的方式构建我的约束。我没有使用中心约束,而是将其约束到距中心 Y 的距离,为该约束创建了一个 IBOutlet,然后对其进行动画处理。

      【讨论】:

        猜你喜欢
        • 2015-09-13
        • 1970-01-01
        • 1970-01-01
        • 2015-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-29
        • 1970-01-01
        相关资源
        最近更新 更多