ios UIKit框架分析 第9天

1.UIViewControllerTransitionCoordinator 转场动画调度器
它可以帮助视图控制器管理转场动画:UIViewControllerTransitionCoordinator协议。在iOS7中,每一个视图控制器(当然也包括UINavigationController和UITabBarController)都有一个transitionCoordinator属性,该属性提供了一系列用于转场动画的强大工具,首先我们来看看animateAlongsideTransition:方法。
 
 
  1. [self.transitionCoordinator 
  2. animateAlongsideTransition:^(id<UIViewControllerTransitionCoo 
  3. rdinatorContext> context) { 
  4. //要执行的动画 
  5. completion:^(id<UIViewControllerTransitionCoordinatorContext> 
  6. context) { 
  7. //动画结束后执行的代码块 
  8. }]; 
我们可以通过这个方法在进行转场动画时并行执行一些其他动画,context参数和之前提到的符合UIViewControllerContextTransitioning协议的transitionContext参数相类似,从该参数中我们可以获取有关转场过程的一些重要信息,包括container view和转场效果。苹果公司甚至允许开发者不传入context参数,只传入完成后执行的block。所以请大胆尝试使用它吧。
 
对于交互转场来说, 视图在转场过程中状态可能发生改变, 于是notifyWhenInteractionEndsUsingBlock:方法特别有用——它可以用来管理视图状态。在交互转场中,viewWillAppear:方法或许会在某个视图控制器推入时被调用,但是按照常理随后应该会被调用的viewDidAppear:则不一定,因为用户随时可能取消该交互(例如在之前的例子中,捏到一半又恢复原状)。
 
由此,如果我们不希望在这种情况下修改视图状态,我们可以使用该方法,恢复对视图的更改(使用UIViewControllerTransitionCoordinatorContext的isCancelled属性)。
 
  1. [self.transitionCoordinator 
  2. notifyWhenInteractionEndsUsingBlock:^(id<UIViewControllerTran 
  3. sitionCoordinatorContext> context) { 
  4. //动画结束后执?行的代码块 
  5. }]; 

2.UIDynamicAnimator ios7新特性

详情参考:http://blog.csdn.net/lengshengren/article/details/12000649

UIDynamicAnimator --动力动画

UIDynamicBehavior--动力行为抽象类


UIPushBehavior--推动行为

通过对象UIPushBehavior给动力项指定一个持续的或者瞬时的力(force vector)

UISnapBehavior -- 捕捉行为

通过对象UISnapBehavior给动力项指定一个捕捉点。动力项会根据配置的效果,来抓住这一捕捉点。

 当动力行为被添加到animator(UIDynamicAnimator类的实例对象)时,动力行为就被激活。animator为动力行为的执行提供了上下文。动力项可以有多个行为,只不过所有这些行为都必须添加到相同的animator中。

UIGravityBehavior--重力行为

通过对象UIGravityBehavior给动力项指定一个重力矢量,具有重力矢量的动力项,会在重力矢量的方向上一直加速,直到与别的动力项产生了冲突或者,遇到了边界。

UIAttachmentBehavior--吸附行为

有一个对象UIAttachmentBehavior,该对象用来指定两个动力项(项或点)之间的连接,当一个项或者点移动时,吸附的项也随之移动。当然,这个连接并不是完全是静态的(static),吸附的项有两个属性damping(阻尼)和oscillation(震荡),这两个属性决定了吸附项的行为是如何随时间而变化的。

UICollisionBehavior--碰撞行为

通过对象UICollisionBehavior指定一个边界,并且让各个动力项,在该边界内参与碰撞。UICollisionBehavior对象还可以指定这些动力项适当的回应碰撞。

UIDynamicItemBehavior-- 动力学元素行为  基本的动力动画描述
•DynamicItem是一个辅助的行为,用来设置运动学元素参与物理仿真过程中的参数,如:弹性系数、摩擦系数、密度、阻力、角阻力以及是否允许旋转等
Øelasticity(弹性系数):决定了碰撞的弹性程度,比如碰撞时物体的弹性
Øfriction(摩擦系数) :决定了沿接触面滑动时的摩擦力大小
Ødensity(密度): 跟size结合使用,计算物体的总质量。质量越大,物体加速或减速就越困难
Øresistance(阻力):决定线性移动的阻力大小,与摩擦系数不同,摩擦系数只作用于滑动运动
ØangularResistance(角阻力) :决定旋转运动时的阻力大小
ØallowsRotation(允许旋转):这个属性很有意思,它在真实的物理世界没有对应的模型。设置这个属性为 NO 物体就完全不会转动,而无论施加多大的转动力
ØUIGravityBehavior:重力行为
ØUICollisionBehavior:碰撞行为
ØUIAttachmentBehavior:附着行为
ØUISnapBehavior:吸附行为
ØUIPushBehavior:推行为
- (void)addDynamicBehaviour {
    theAnimator = [[UIDynamicAnimator alloc] initWithReferenceView:self];
    UIGravityBehavior *gravityBehavior = [[UIGravityBehavior alloc] initWithItems:@[ballView]];
    [theAnimator addBehavior:gravityBehavior];

    UICollisionBehavior *collisionBehavior = [[UICollisionBehavior alloc] initWithItems:@[ballView]];
    [collisionBehavior setTranslatesReferenceBoundsIntoBoundary:YES];
    [theAnimator addBehavior:collisionBehavior];

    UIDynamicItemBehavior *itemBehavior = [[UIDynamicItemBehavior alloc] initWithItems:@[ballView]];
    [itemBehavior setElasticity:0.9];
    [theAnimator addBehavior:itemBehavior];
    [collisionBehavior setCollisionDelegate:self];
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值