ios 做转场动画的时候,视图内部的控件frame不变怎么回事

2025-05-07 14:47:45
推荐回答(2个)
回答1:

我们需要自定义一个遵循的协议的动画过渡管理对象,并实现两个必须实现的方法:
//返回动画事件
- (NSTimeInterval)transitionDuration:(nullable id )transitionContext;
//所有的过渡动画事务都在这个方法里面完成
- (void)animateTransition:(id )transitionContext;
我们还需要自定义一个继承于UIPercentDrivenInteractiveTransition的手势过渡管理对象,我把它成为百分比手势过渡管理对象,因为动画的过程是通过百分比控制的
成为相应的代理,实现相应的代理方法,返回我们前两步自定义的对象就OK了 !

回答2:

在iOS中,每个控件都是继承于UIView的,都会有视图的属性存在,控制这个视图的位置就有Frame和Bounds两个属性
  frame指的是:该view在父view坐标系统中的位置和大小。(参照点是父亲的坐标系统)
  bounds指的是:该view在本身坐标系统中 的位置和大小。(参照点是本身坐标系统)
  -( CGRect )frame{
  return CGRectMake ( self . frame . origin . x , self . frame . origin . y , self . frame . size . width , self . frame . size . height );
  }
  -( CGRect )bounds{
  return CGRectMake ( 0 , 0 , self . frame . size . width , self . frame . size . height );
  }
  总结来说,如果定义一个控件,要设置它相对于父视图的坐标大小,就要使用Frame
  如果要设置它在自己这个视图上的大小就使用Bounds