ios UIKit动力
2015-07-14 12:55
405 查看
UIkit动力学是UIkit框架中模拟真实世界的一些特性。
主要有UIDynamicAnimator类,通过这个类中的不同行为来实现一些动态特性。
它一般有两种初始化方法,先讲常见的第一种
?
动态特性的实现主要依靠它所添加的行为,通过以下方法进行添加和移除,
?
接下来介绍五个不同的行为,UIAttachmentBehavior(吸附),UICollisionBehavior(碰撞),UIGravityBehavior(重力),UIPushBehavior(推动),UISnapBehavior(捕捉)。另外还有一个辅助的行为UIDynamicItemBehavior,用来在item层级设定一些参数,比如item的摩擦,阻力,角阻力,弹性密度和可允许的旋转等等。
先讲吸附行为,
它的初始化方法
?
item是实现UIDynamicItem协议的id类型,这里设置吸附一个UIImageView的实例iv。offset可以设置吸附的偏移,anchor是设置锚点。
UIAttachmentBehavior有几个属性,例如damping,frequency。damping是阻尼数值,frequency是震动频率
直接上代码,实现一个pan手势,让一个image跟着手势跑
?
UIPushBehavior 可以为一个UIView施加一个力的作用,这个力可以是持续的,也可以只是一个冲量。我们可以指定力的大小,方向和作用点等等信息。
?
UIPushBehavior 有pushDirection、magnitude等属性,
?
直接上代码,实现随机掉落一张图片的代码
?
继续上面的代码,当图片快掉落出边界的时候有 碰撞效果,这个就是UICollisionBehavior实现的。
?
另外,UICollisionBehavior有它的代理,其中列举两个方法,它们表示行为开始和结束的时候的代理。
?
UISnapBehavior 将UIView通过动画吸附到某个点上。
?
文章开头说到UIDynamicAnimator有两种初始化方法,这里介绍它与UICollectionView的完美结合,让UICollectionView产生各种动态特性的行为。
你是否记得iOS系统中信息应用中的附有弹性的消息列表,他就是加入了UIAttachmentBehavior吸附行为,这里通过一个UICollectionView实现类似效果。
主要是复写UICollectionViewFlowLayout,在layout中为每一个布局属性元素加上吸附行为就可以了。
关于复写layout,可以参考onevcat的博客
http://www.onevcat.com/2012/08/advanced-collection-view/
下面就直接上代码了
首先遍历每个 collection
view layout attribute 来创建和添加新的 dynamic
animator
?
接下来我们现在需要实现 layoutAttributesForElementsInRect: 和 layoutAttributesForItemAtIndexPath: 这两个方法,UIKit 会调用它们来询问 collection
view 每一个 item 的布局信息。我们写的代码会把这些查询交给专门做这些事的dynamic
animator
?
然后是响应滚动事件的方法
这个方法会在 collection view 的 bound 发生改变的时候被调用,根据最新的 content
offset 调整我们的 dynamic animator 中的 behaviors 的参数。在重新调整这些 behavior 的 item 之后,我们在这个方法中返回 NO;因为 dynamic
animator 会关心 layout 的无效问题,所以在这种情况下,它不需要去主动使其无效
?
让我们仔细查看这个代码的细节。首先我们得到了这个 scroll
view(就是我们的 collection view ),然后计算它的 content
offset 中 y 的变化(在这个例子中,我们的 collection
view 是垂直滑动的)。一旦我们得到这个增量,我们需要得到用户接触的位置。这是非常重要的,因为我们希望离接触位置比较近的那些物体能移动地更迅速些,而离接触位置比较远的那些物体则应该滞后些。
对于 dynamic animator 中的每个 behavior,我们将接触点到该 behavior 物体的
y 的距离除以 500。分母越小,这个 collection
view 的的交互就越有弹簧的感觉。
UIDynamicAnimator
主要有UIDynamicAnimator类,通过这个类中的不同行为来实现一些动态特性。它一般有两种初始化方法,先讲常见的第一种
?
?
UIAttachmentBehavior(吸附)
先讲吸附行为,它的初始化方法
?
UIAttachmentBehavior有几个属性,例如damping,frequency。damping是阻尼数值,frequency是震动频率
直接上代码,实现一个pan手势,让一个image跟着手势跑
?
UIPushBehavior(推动)
UIPushBehavior 可以为一个UIView施加一个力的作用,这个力可以是持续的,也可以只是一个冲量。我们可以指定力的大小,方向和作用点等等信息。?
?
UIGravityBehavior(重力)
直接上代码,实现随机掉落一张图片的代码?
UICollisionBehavior(碰撞)
继续上面的代码,当图片快掉落出边界的时候有 碰撞效果,这个就是UICollisionBehavior实现的。?
?
UISnapBehavior(捕捉)
UISnapBehavior 将UIView通过动画吸附到某个点上。?
UICollectionView与UIDynamicAnimator
文章开头说到UIDynamicAnimator有两种初始化方法,这里介绍它与UICollectionView的完美结合,让UICollectionView产生各种动态特性的行为。你是否记得iOS系统中信息应用中的附有弹性的消息列表,他就是加入了UIAttachmentBehavior吸附行为,这里通过一个UICollectionView实现类似效果。
主要是复写UICollectionViewFlowLayout,在layout中为每一个布局属性元素加上吸附行为就可以了。
关于复写layout,可以参考onevcat的博客
http://www.onevcat.com/2012/08/advanced-collection-view/
下面就直接上代码了
首先遍历每个 collection
view layout attribute 来创建和添加新的 dynamic
animator
?
view 每一个 item 的布局信息。我们写的代码会把这些查询交给专门做这些事的dynamic
animator
?
这个方法会在 collection view 的 bound 发生改变的时候被调用,根据最新的 content
offset 调整我们的 dynamic animator 中的 behaviors 的参数。在重新调整这些 behavior 的 item 之后,我们在这个方法中返回 NO;因为 dynamic
animator 会关心 layout 的无效问题,所以在这种情况下,它不需要去主动使其无效
?
view(就是我们的 collection view ),然后计算它的 content
offset 中 y 的变化(在这个例子中,我们的 collection
view 是垂直滑动的)。一旦我们得到这个增量,我们需要得到用户接触的位置。这是非常重要的,因为我们希望离接触位置比较近的那些物体能移动地更迅速些,而离接触位置比较远的那些物体则应该滞后些。
对于 dynamic animator 中的每个 behavior,我们将接触点到该 behavior 物体的
y 的距离除以 500。分母越小,这个 collection
view 的的交互就越有弹簧的感觉。
相关文章推荐
- ios UIKit动力 分类: ios技术 2015-07-14 12:55 196人阅读 评论(0) 收藏
- IOS开发点滴---UIView转UIImage以及切割UIView
- xcode6模拟器UITextField不能自动弹出键盘
- OSGI Blueprint(2)
- NDK编译问题: Program "ndk-build" is not found in PATH 和 Unable to launch cygpath. Is Cygwin on the path?
- Win10 UWP开发中的重复性静态UI绘制小技巧 2
- HDU 5273 Dylans loves sequence(线段树求逆序数对+离散化)
- UITableViewcell autolayout下动态高度
- 判断UITextField.text是否为空
- Introduction to Guid ( globally unique identifier )
- 嵌套循环中的 continue ,break
- OSGI Blueprint
- leetcode Repeated DNA Sequences 哈希表
- [SoapUI] 在某个测试步骤下面增加Script Assertion,运用 messageExchange 获取response content
- Functional MRI (second edition) -- 5. MR Contrast Mechanisms and Pulse Sequences
- easyui在ie下要注意的问题
- 芸芸毕业生
- 线性布局
- Assertion failure in -[UICGColor encodeWithCoder:]
- iOS隐藏UITableview下面多余的tableviewcell的线条