想制作一个按钮,类似于iPhone 的辅助touch的那个小白点的按钮。但是注意:千万不能也做成小白点,可能会导致审核被拒。
不明白网络上查到的那些,为什么会那么复杂,涉及到那么多的页面。其实只要在要出现这个按钮的控制器的.m文件里写几段代码就可以解决,非常轻便,尤其适合开发新手。
首先,在想放这个button的vc里,创建一个成员对象。
@property (nonatomic,strong)UIButton *spButton
然后就可以开始创建按钮了,我写成了一个方法:
//创建可拖动、自动贴近边缘的 事件上报按钮 [self initAddEventBtn];
方法的具体内容:
-(void)initAddEventBtn{ UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(SCREEN_WIDTH-71,300,66,66)]; [btn setImage:[UIImage imageNamed:@"shijianshangbao"] forState:UIControlStateNormal]; btn.backgroundColor = [UIColor colorWithWhite:0.88 alpha:0.8]; btn.tag = 0; btn.layer.cornerRadius = 8; [self.view addSubview:btn]; self.spButton = btn; [_spButton addTarget:self action:@selector(addEvent:) forControlEvents:UIControlEventTouchUpInside]; //添加手势 UIPanGestureRecognizer *panRcognize=[[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanGesture:)]; [panRcognize setMinimumNumberOfTouches:1]; [panRcognize setEnabled:YES]; [panRcognize delaysTouchesEnded]; [panRcognize cancelsTouchesInView]; [btn addGestureRecognizer:panRcognize]; }
醉关键的部分来了,实现按钮的移动事件处理:
- (void)handlePanGesture:(UIPanGestureRecognizer *)recognizer { //移动状态 UIGestureRecognizerState recState = recognizer.state; switch (recState) { case UIGestureRecognizerStateBegan: break; case UIGestureRecognizerStateChanged: { CGPoint translation = [recognizer translationInView:self.navigationController.view]; recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x, recognizer.view.center.y + translation.y); } break; case UIGestureRecognizerStateEnded: { CGPoint stopPoint = CGPointMake(0, SCREEN_HEIGHT / 2.0); if (recognizer.view.center.x < SCREEN_WIDTH / 2.0) { if (recognizer.view.center.y <= SCREEN_HEIGHT/2.0) { //左上 if (recognizer.view.center.x >= recognizer.view.center.y) { stopPoint = CGPointMake(recognizer.view.center.x, self.spButton.width/2.0); }else{ stopPoint = CGPointMake(self.spButton.width/2.0, recognizer.view.center.y); } }else{ //左下 if (recognizer.view.center.x >= SCREEN_HEIGHT - recognizer.view.center.y) { stopPoint = CGPointMake(recognizer.view.center.x, SCREEN_HEIGHT - self.spButton.width/2.0); }else{ stopPoint = CGPointMake(self.spButton.width/2.0, recognizer.view.center.y); // stopPoint = CGPointMake(recognizer.view.center.x, SCREEN_HEIGHT - self.spButton.width/2.0); } } }else{ if (recognizer.view.center.y <= SCREEN_HEIGHT/2.0) { //右上 if (SCREEN_WIDTH - recognizer.view.center.x >= recognizer.view.center.y) { stopPoint = CGPointMake(recognizer.view.center.x, self.spButton.width/2.0); }else{ stopPoint = CGPointMake(SCREEN_WIDTH - self.spButton.width/2.0, recognizer.view.center.y); } }else{ //右下 if (SCREEN_WIDTH - recognizer.view.center.x >= SCREEN_HEIGHT - recognizer.view.center.y) { stopPoint = CGPointMake(recognizer.view.center.x, SCREEN_HEIGHT - self.spButton.width/2.0); }else{ stopPoint = CGPointMake(SCREEN_WIDTH - self.spButton.width/2.0,recognizer.view.center.y); } } } //如果按钮超出屏幕边缘 if (stopPoint.y + self.spButton.width+40>= SCREEN_HEIGHT) { stopPoint = CGPointMake(stopPoint.x, SCREEN_HEIGHT - self.spButton.width/2.0-49); NSLog(@"超出屏幕下方了!!"); //这里注意iphoneX的适配。。X的SCREEN高度算法有变化。 } if (stopPoint.x - self.spButton.width/2.0 <= 0) { stopPoint = CGPointMake(self.spButton.width/2.0, stopPoint.y); } if (stopPoint.x + self.spButton.width/2.0 >= SCREEN_WIDTH) { stopPoint = CGPointMake(SCREEN_WIDTH - self.spButton.width/2.0, stopPoint.y); } if (stopPoint.y - self.spButton.width/2.0 <= 0) { stopPoint = CGPointMake(stopPoint.x, self.spButton.width/2.0); } [UIView animateWithDuration:0.5 animations:^{ recognizer.view.center = stopPoint; }]; } break; default: break; } [recognizer setTranslation:CGPointMake(0, 0) inView:self.view]; }至此就大功告成啦。里面的一些方法、图片名称,自行替换成你需要的。