IOS开发UI基础:QQ粘性效果

QQ粘性效果实现
本文详细介绍了如何在iOS应用中实现QQ风格的粘性效果,包括自定义大圆控件并使其随手指移动,添加小圆控件并在两圆间绘制形变矩形来模拟粘性效果。

QQ粘性效果

实现思路:

1.自定义大圆控件(UIButton)可以显示背景图片,和文字

2.让大圆控件随着手指移动而移动

  • 注意不能根据形变修改大圆的位置,只能通过center,因为全程都需要用到中心点计算。

3.在拖动的时候,添加一个小圆控件在原来大圆控件的位置

  • 注意这个小圆控件并不会随着手指移动而移动,因此应该添加到父控件上
  • 一开始设置中心点和尺寸和大圆控件一样。
  • 随着大圆拖动,小圆半径不断减少,可以根据两个圆心的距离,随便生成一段比例,随着圆心距离增加,圆心半径不断减少。
        // 计算小圆半径:随机搞个比例,随着圆心距离增加,圆心半径不断减少。
        CGFloat smallRadius = _circleR2 - d / 10;
  • 每次小圆改变,需要重新设置小圆的尺寸和圆角半径。

4.粘性效果

  • 就是在两圆之间绘制一个形变矩形,描述形变矩形路径。
  • 这里大致介绍下计算思路,不需要太纠结
  • 这里需要用到CAShapeLayer,可以根据一个路径,生成一个图层,展示出来。把形变图层添加到父控件并且显示在小圆图层下就OK了。因为所有计算出来的点,都是基于父控件。
  • 注意:这里不能用绘图,因为绘图内容只要超过当前控件尺寸就不会显示,但是当前形变矩形必须显示在控件之外

5.粘性业务逻辑处理

  • 当圆心距离超过100,就不需要描述形变矩形(并且把之前的形变矩形移除父层),小圆也需要隐藏。

  • 没有超过100,则相反。

6.手指停止拖动业务逻辑

  • 判断下圆心是否超过100,超过就播放爆炸效果,添加个UIImageView在当前控件上,并且需要取消控制器view的自动布局。
    // 取消Autoresizing转自动布局
    self.view.translatesAutoresizingMaskIntoConstraints = NO;
  • 没有超过,就还原。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值