现今多数的分类布局都没有交互功能,我们可以利用苹果提供的UIDynamicanimation这个类,实现交互功能,让界面更加人性化;当然在此也吐槽一下苹果的
UICollisionBehavior类,边界有个小的BUG,当手势滑动穿过边界时,View会穿过碰撞边界;当然,给View添加一个移动范围就能避免这种BUG
在此,主要使用到的物理引擎类有:
UIAttachmentBehavior吸附效果, UISnapBehavior捕捉效果 UICollisionBehavior 碰撞效果;
我们将这个动画封装在一个View中;
详细原理为:
在手势开始时,添加一个碰撞边界;对上面3个小球添加相互间的吸附行为,对下面3个小球添加相互间的吸附行为;
相互间的吸附行为定义好后,再对单个小球添加吸附行为,让另外的3各小球随着小球的移动而移动;
在手势发生变化时,定义anchorPoint,让点击的那个小球随着手势的移动而移动,当然,在此处添加边界,防止穿墙BUG;
最后,当手势结束时,移除所有的动画行为,添加捕捉行为,让小球能够回到原来的位置.
详细代码:
#import "EyeView.h"
@interface EyeView ()
{
CGFloat ball_wirth;
CGPoint oldCenterOfBall1;
CGPoint oldCenterOfBall2;
CGPoint oldCenterOfBall3;
CGPoint oldCenterOfBall4;
CGPoint oldCenterOfBall5;
CGPoint oldCenterOfBall6;
CGPoint newCenter;
}
@property (strong, nonatomic) UIDynamicAnimator *animation; //新建物理动画
@property (strong, nonatomic) UIAttachmentBehavior *dragBehavior;//吸附行为(通过设置锚点来实现)
@property (strong, nonatomic) UIAttachmentBehavior *attachmentBehavior1;//1,