介绍
这篇文章主要介绍了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如何实现支付宝蚂蚁森林随机按钮及抖动效果