iOS实现滑动弧形菜单的思路与方法

  

  

最近公司的项目中需要用到弧形菜单,起初自定义UICollectionView的布局,但实现出的效果并不符合项目中要求按钮始终垂直于界面,界面始终保持几个按钮等一系列需求(是我水平不够),后来索性用UIView写了一个弧形可滑动菜单。

  

<>强效果如下:

  

 iOS实现滑动弧形菜单的思路与方法”> <br/>
  </p>
  <p> </p>
  <p>,,,,,1,根据思路可以自己确定到半径与圆心的每个按钮所在的x点,可根据数学公式求得y点</p>
  <p>,,,,,2,给按钮添加拖动手势UIPanGestureRecognizer,根据偏移量x计算出对应偏移弧线的距离,根据圆的运动轨迹赋值给按钮的x并更新y </p>
  <p>,,,,,3、结束拖动手势的时候计算偏移距离,根据是否划到下一个按钮的一半的宽度来实施动画更新按钮的中心</p>
  <p> </p>
  <p>已知圆心,半径与x值求y值:(x) ^ 2 + (y - b) ^ 2=r2。</p>
  <p>用到的UIPanGestureRecognizer的三种状态:UIGestureRecognizerStateBegan \ UIGestureRecognizerStateChanged \ UIGestureRecognizerStateEnded </p>
  <p> <强>用UIPanGestureRecognizer的locationInView方法来确定当前点的位置</强> </p>
  
  <pre类=   如果(pgr.state==UIGestureRecognizerStateBegan) {      自我。endMove=没有;      自我。beginPoint=(pgr locationInView:自我);      }else if (pgr.state==UIGestureRecognizerStateChanged) {   自我。movePoint=(pgr locationInView:自我);      自我。moveX=叹г渤?self.movePoint。x - *晶圆厂(self.movePoint self.beginPoint.x)。x - self.beginPoint.x) +晶圆厂(self.movePoint。y - self.beginPoint.y) *晶圆厂(self.movePoint。y - self.beginPoint.y));   }      

计算出偏移的x点后要根据起始点来判断用户是向左滑动还是向右滑动

        如果(self.movePoint.x> self.beginPoint.x) {   自我。moveNum +=self.moveX;   其他}{   自我。moveNum -=self.moveX;   }      

之后判断判断是否超过了所有按钮所在的范围并赋值

        如果(自我。moveNum祝辞0){   自我。moveNum=0;   }      如果(自我。moveNum & lt;- - - - - - ((SCREEN_WIDTH - 20 - subViewW)/(自我。showBtnCount - 1)) * (self.subViewArray。计数- self.showBtnCount)) {   自我。moveNum=- ((SCREEN_WIDTH - 20 - subViewW)/(自我。showBtnCount - 1)) * (self.subViewArray。数- self.showBtnCount);   }      

将偏移量赋值给x并更新y值

     ///中心点   CGFloat yy=0.0;   CGFloat xx=0.0;   CGFloat保证金=0.0;///子视图中x点   UIView *视图=self.subViewArray [0];   CGFloat subCenterX=view.frame.size.width/2;      (NSInteger我=0;i      

原理大概就是这些

  

然后把项目中的效果直接做了简单的封装传了个演示

  

Github地址:https://github.com/xuuhan/HXCamberMenu

  

本地下载地址:http://xiazai.jb51.net/201705/yuanma/HXCamberMenu (jb51.net) . rar

  

  

以上就是这篇文章的全部内容了,实现的效果和功能可能还有着明显的限制,希望同学们多多指教,同时也希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
  

iOS实现滑动弧形菜单的思路与方法