做拖动的按钮很简单,关键就是设置正确的手势,改变按钮的位置。
上代码:
1.按钮初始化
-(UIButton *)kfBtn{
static const NSInteger kfBtnW = 50;
if (!_kfBtn) {
_kfBtn = [[UIButton alloc]initWithFrame:CGRectMake(SCREEN_WIDTH - kfBtnW, 300, kfBtnW, kfBtnW)];
[_kfBtn setImage:[UIImage imageNamed:@"灰"] forState:UIControlStateNormal];
[_kfBtn addTarget:self action:@selector(click_btn) forControlEvents:UIControlEventTouchDown];
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(move_btn:)];
pan.minimumNumberOfTouches = 1;
pan.maximumNumberOfTouches = 1;
[_kfBtn addGestureRecognizer:pan];
}
return _kfBtn;
}
2.拖动代码
-(void)move_btn:(UIPanGestureRecognizer *)sender{
if (sender.state != UIGestureRecognizerStateEnded && sender.state != UIGestureRecognizerStateFailed){
CGPoint location = [sender locationInView:sender.view.superview];
CGFloat x = location.x;
CGFloat y = location.y;
self.kfBtn.center = CGPointMake(x, y);
}
}
3.加上边界判断
-(void)move_btn:(UIPanGestureRecognizer *)sender{
if (sender.state != UIGestureRecognizerStateEnded && sender.state != UIGestureRecognizerStateFailed){
//获取点击的坐标
CGPoint location = [sender locationInView:sender.view.superview];
CGFloat x = location.x;
CGFloat y = location.y;
CGFloat btnW = self.kfBtn.frame.size.width;
CGFloat btnH = self.kfBtn.frame.size.height;
//判断边界
if (x - btnW/2.0f <= 0) x = btnW/2.0f;
if (SCREEN_WIDTH - x <= btnW/2.0f) x = SCREEN_WIDTH - btnW/2.0f;
if (y - btnH/2.0f <= 0) y = btnH/2.0f;
if (SCREENH_HEIGHT - y <= btnH/2.0f) y = SCREENH_HEIGHT - btnH/2.0f;
//赋值
self.kfBtn.center = CGPointMake(x, y);
}
}
4.调用
[self.view addSubView:self.kfBtn];
ok~一分钟