Swift 修改约束 添加UIView动画

最近在使用Swift编写程序时 使用UIView动画 对约束执行动画遇到了一个小坑

 

1.在控制器中添加一个 容器view, 容器view的约束是宽高都是300/ 水平居中/ 竖直居中

2. 在容器view中添加一个imageView, imageView的约束是:和容器view等宽等高 / 水平居中 /顶部对齐

着这里希望通过修改imageView的顶部约束来执行动画

 

private func startAnimation(){
    
        self.imageViewCons.constant = -self.contentViewCons.constant;
        self.imageView.layoutIfNeeded();
        
        UIView.animateWithDuration(2.0, animations: { () -> Void in
            self.imageViewCons.constant = self.contentViewCons.constant;
            UIView.setAnimationRepeatCount(MAXFLOAT);
            // 修改布局约束
            self.imageView.layoutIfNeeded();
            
            }) { (_) -> Void in
                
        };
    }


结果是直接停止在最终状态.

 

因为在使用约束添加动画的时候,有个原则就是动画要添加到当前视图的父视图上

所以我们需要修改更新约束的对象为父视图

 

private func startAnimation(){
        
        self.imageViewCons.constant = -self.contentViewCons.constant;
        self.contentView.layoutIfNeeded();
        
        UIView.animateWithDuration(2.0, animations: { () -> Void in
            self.imageViewCons.constant = self.contentViewCons.constant;
            UIView.setAnimationRepeatCount(MAXFLOAT);
            // 调用父视图的刷新约束
            self.contentView.layoutIfNeeded();
            
            }) { (_) -> Void in
                
        };
    }

这样动画既可以正常执行了.
 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值