动画之约束动画

动画之约束动画

基于约束的动画。就是修改NSLayoutConstraint的动画。

  • 约束的查找
  • 实现动画
  • 约束生效的方式
  • Anchor约束

约束的查找

要修改View的约束,首先得找到原定义的约束吧。或者修改原约束的定义,或者废除原约束添加新的约束。但不管怎样,首先咱们得找到原约束!
相信大家对自动布局很熟悉了,在代码中修改约束也比较常见。但一般都使用IBOutlet的方式获取的特写约束。但如果要获取大量的约束呢,咱们不可以每一个约束都链接上IBOutlet的属性吧。下面介绍两种方式去获取特写的约束:
约束遍历的方式

对于一个View与其父View(或兄弟之间的约束),通过对其父View的约束进行遍历,通过约束的属性进行查找:

titleLabel.superview?.constraints.forEach { constraint in
      if constraint.firstItem === titleLabel && 
      constraint.firstAttribute == .centerX {
        constraint.constant = 50.0
        return
        }
      }

这种方式有两个缺点:1.如果titleLabel不是firstItem,而是secondItem呢?那判断条件还得去判断一次; 2.如果firstItem有很多兄弟节点,有很多关于它的约束,那查找起特写的约束会相当麻烦。

为约束设置identifier的方式

为将要修改的约束设置一个identifier,那查找起来就方便多了。直接通过判断identifier去实现查找。

titleLabel.superview?.constraints.forEach { constraint in
      if constraint.identifier == "TitleCenterY" {
          constraint.isActive = false
          continue
      }
 }

实现动画

当你修改了约束以后,通过调用view.layoutIfNeeded()去刷新页面,让约束生效。所以实现约束动画的方式就是将view.layoutIfNeeded()放到View动画的动画部分:

UIView.animate(withDuration: 1.0, delay: 0.0,
  options: .curveEaseIn,
  animations: {
    view.layoutIfNeeded()
  },completion: nil
)

约束生效的方式

以前写约束总是通过创建约束,然后通过View.addConstraints的方式让约束生效。让约束生效的另一种方式就是,调用约束的active方法

constraint.isActive = true
//另一种方法
headerview.addConstraints([constraint01,constraint02,constraint03])

Anchor约束

iOS9.0以后的一个类NSLayoutAnchor。它能让我们创建约束更加直观,方便。

  @available(iOS 9.0, *)
    open var centerXAnchor: NSLayoutXAxisAnchor { get }
//下面是一个例子
 let conX = detailView.centerXAnchor.constraint(equalTo:
headerview.centerXAnchor)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于物理的动画是指利用物理原理和方程来模拟和呈现真实世界中物体运动的图像效果。OpenGL是一种跨平台的图形库,可以通过编程接口来实现基于物理的动画。 在基于物理的动画中,一般需要考虑物体的质量、力、速度、加速度等物理属性。通过使用OpenGL提供的渲染功能,可以将物体的运动以视觉化的方式展现出来。 在OpenGL中实现基于物理的动画,主要涉及以下几个步骤: 1. 创建物体模型:首先需要设计并创建物体的模型,可以使用OpenGL提供的基本几何形状,如立方体、球体等,也可以通过加载外部模型文件来创建复杂的物体。 2. 设置物体属性:根据物体的质量和形状信息,为物体设置相应的物理属性,如设置质量、惯性矩阵等。 3. 定义力和约束条件:根据物理规律,定义物体所受到的力和约束条件。常见的力有重力、弹力、摩擦力等,而约束条件有碰撞检测、边界限制等。 4. 计算物体运动:根据物体的物理属性、所受力和约束条件,使用数值计算方法,如欧拉法、四阶龙格-库塔法等,来逐帧计算物体的运动状态。 5. 渲染动画效果:将计算得到的物体位置和姿态信息,通过OpenGL提供的渲染函数,将物体渲染到屏幕上,形成连续的动画效果。 基于物理的动画在游戏、虚拟现实等领域有着广泛应用,能够实现逼真的物体运动效果,增强用户的沉浸感。通过将物理仿真和OpenGL图形渲染相结合,可以创造出更加逼真、流畅的动画效果,提升用户体验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值