iOS如何实现支付宝蚂蚁森林随机按钮及抖动效果

  介绍

这篇文章主要介绍了iOS如何实现支付宝蚂蚁森林随机按钮及抖动效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。

工作中遇到了一个需求要做一个类似于蚂蚁森林的在一定范围内随机出现不相交且有上下抖动的控件

做完的图如下

 iOS如何实现支付宝蚂蚁森林随机按钮及抖动效果

WechatIMG3.jpeg

这个需求在做的时候需要注意几个地方

<强> 1。按钮随机且不相交
2。动画效果(核心动画)
3。需要监听点击事件和全部领取事件(全部领取完后会刷新接口)

好开始搞
随机按钮是其中最主要的两个点之一(上面的1和2)
在做的时候需要注意范围随机出现的控件必须保证出现在上图的范围之内

那么随机x轴坐标和y轴坐标时就需要注意

<强> 1。取值范围

按钮的风骚女子要大于按钮宽度的1/2
按钮的maxX要小于屏幕宽减去按钮宽度的1/2
按钮的如矿坑的要大于marginY加上按钮高度的1/2
按钮的maxY要小于背景控件底部减去按钮宽度的1/2

<强> 2。随机按钮不重合

这个很简单一般来讲这种按钮都是一个圆的背景图为背景(蚂蚁森林)或者透明背景(我做这个)
如果是圆的背景图:我们都知道对于一个45 45 90的等腰直角三角形来说根据勾股定理设一个为直角边长b为斜边长有2 * ^ 2=^ 2故b=?^ 2 * 2),而圆的半径在各处都相等,所以只要两个按钮的圆心距离大于两个半径相加及2 * b就可以
如果背景是透明的,同上
不过如果有很奇葩的需求,背景是其他图形可能会根据需求来研究是否需要具体计算两个按钮中心的距离了

随机按钮部分代码如下

# pragma  mark 作用;随机数   ,   安康;(NSInteger) getRandomNumber:(CGFloat)得到:(CGFloat)   {   ,return  (NSInteger)(得到+,(arc4random (), %, ((NSInteger)用神;(NSInteger)得到+,1)));   }   ,   ,   # pragma  mark 安康;随机按钮   ,   安康;(空白)createRandomBtnWithType:(FruitType) fruitType 文字:textString (NSString  *)   {   ,CGFloat  minY =, kBtnMinY  +, kBtnDiameter  *, 0.5, +, kMargin;   ,CGFloat  maxY =, self.bounds.size.height 作用;kBtnDiameter  *, 0.5,安康;kMargin;   ,CGFloat  minX =, kBtnMinX  +, kMargin;   ,CGFloat  maxX =, DEF_SCREEN_WIDTH 作用;kBtnDiameter  *, 0.5,安康;0,安康;kMargin;   ,   ,CGFloat  x =, [self  getRandomNumber: minX : maxX);   ,CGFloat  y =, [self  getRandomNumber: minY : maxY);   ,   ,BOOL  success =,是的,   ,for  (int 小姐:=,0;,小姐:& lt;, self.centerPointArr.count;,小姐:+ +),{   NSValue 才能;* pointValue =, self.centerPointArr[我];   CGPoint 才能;point =, [pointValue  CGPointValue];//才能如果是圆,/^ 2,如果不是圆,不用/^ 2   if 才能;(√战俘(point.x ,安康,x,, 2), +,战俘(point.y ,安康,y,, 2)), & lt;=, kBtnDiameter  +, kMargin), {   ,,success =,没有;   ,,(self  createRandomBtnWithType: fruitType 文字:textString);   ,才能回报;   ,,}   ,}   ,if  (success ==,是的),{   NSValue 才能;* pointValue =, (NSValue  valueWithCGPoint: CGPointMake (x, y)];   (才能self.centerPointArr  addObject pointValue):;   ,,   UIButton 才能;* randomBtn =, (UIButton  buttonWithType: 0);   时间=randomBtn.bounds 才能;CGRectMake (0, 0, kBtnDiameter,, kBtnDiameter);   时间=randomBtn.center 才能;CGPointMake (x, y);   (才能randomBtn  setTitleColor: [UIColor  whiteColor], forState: 0];   (才能self  addSubview randomBtn):;   (才能randomBtn  addTarget: self 行动:@ selector (randomBtnClick:), forControlEvents: UIControlEventTouchUpInside);   ,,   (才能self.randomBtnArr  addObject randomBtn):;   (才能self.randomBtnArrX  addObject randomBtn):;   ,,//区才能分   if 才能;(fruitType ==, FruitTypeTimeLimited), {   ,,randomBtn.tag =, kUnlimitedBtnTag  +, self.centerPointArr.count 作用;1;   ,,[self.timeLimitedBtnArr  addObject randomBtn):;   ,,randomBtn.backgroundColor =, [UIColor  blueColor];   ,,},else  if  (fruitType ==, FruitTypeUnlimited), {   ,,randomBtn.tag =, kTimeLimitedBtnTag  +, self.centerPointArr.count 作用;1;   ,,[self.unlimitedBtnArr  addObject randomBtn):;   ,,randomBtn.backgroundColor =, [UIColor  redColor];   ,,}   (才能randomBtn  setTitle: textString  forState: 0];   ,,   (才能self  animationScaleOnceWithView randomBtn):;   (才能self  animationUpDownWithView randomBtn):;   ,}   }

iOS如何实现支付宝蚂蚁森林随机按钮及抖动效果