首页 > 代码库 > 粒子效果 QQ粘性布局 (CAShapeLayer形状图层)

粒子效果 QQ粘性布局 (CAShapeLayer形状图层)

 

CAShapeLayer 可以根据一个路径生成一个形状;

1.基本功能的实现:
(1)添加一个button;自定义button,创建一个类;绑定按钮;
(2)在自定义的button类中,在awakeFromNib中对这个按钮进行初始化;设置圆角,背景颜色,字体颜色,字体大小;
(3)调用取消高亮状态的方法;-setHightLighted;
(4)awakeFromNib添加pan手势,
(5)在pan方法中:获取偏移量;修改self.transform=CGAffine。。。;进行复位操作;
(6)在awakeFromNib方法中添加一个小圆uiview,小圆的位置和大元的位置相同。将小圆添加到大圆的父控件上;
(7)调用一个方法,把这个view插入到一个指定的位置中去;
[self. superview insertSubview:smallCircle belowSubview:self];
(8) 求两个圆之间的距离;定义一个方法传入大圆和小圆;
大圆的x值减去小圆的x值; 大圆的y值减去小圆的y值;
两者平方和求根; 求开根sqrt( );
在pan中调用此方法,计算出实际的距离;
(9)不能使用transform来实现控件的移动,因为transform并没有修改center,修改的是frame,所以不能计算出两个圆之间的距离;
(10)使用修改center的方法实现平移;
CGPoint center = self.center;
center.x += offset.x;
center.y += offset.y;
self.center = center;
(11)让小圆半径根据距离的增大逐渐减小;

2.求点

采用数学求角方法的进行求解,这里不再赘述;(数学不好请放弃。。。)

3.粘性布局具体
(1)提供方法,给定两个圆,返回一个不规则路径

(2)在自写的求两个点之间的方法中,确定几个点的坐标路径并返回。

(3) 定义一个成员属性CAShapeLayer形状图层,懒加载生成一个形状图层shapeL,并且在其中设置shapeL的fill color为红色。
(4)在pan方法中,拿到shapeL;它的path属性就等于得到的坐标路径;将shapeL插入到self.superview的最底下;
(5)判断当小圆的hidden属性等于NO;也就是不隐藏的时候,才赋值shapeLpath属性就等于得到的坐标路径;
(6)判断两个圆之间的distance大于60时候,让小圆和shapeL都隐藏;
(7)判断当手指松开的时候,判断两个圆之间的distance是否大于60;
如果小于60,就将shapeL从父控件中移除,并让按钮复位(让大圆的中心等于小圆的中心);
如果大于60就让按钮消失,播放一段动画,添加一个image view到按钮身上,设置imageview的frame等于按钮的bounds;
定义一个NSmutableArray 用for循环添加几张图片;
imageV.animationImages=imageArray;
imageV.animationDuration=1;
[image startAnimating];
动画运行延迟1秒钟后移除动画。
让autoResizingMask...不要转为自动布局;

粒子效果 QQ粘性布局 (CAShapeLayer形状图层)