1.添加长按手势
//长按手势
UILongPressGestureRecognizer *longGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(buttonLongPressed:)];
[btn addGestureRecognizer:longGesture];
2.判断手势的状态
- (void)buttonLongPressed:(UILongPressGestureRecognizer *)sender
{
UIButton *btn = (UIButton *)sender.view;
if (sender.state == UIGestureRecognizerStateBegan)
{
// AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); 手机震动的效果
startIndex = [self indexInBtnItemArray:btn];
startPoint = [sender locationInView:sender.view];
originCenter = btn.center;
[UIView animateWithDuration:0.5 animations:^{
btn.transform = CGAffineTransformMakeScale(1.1, 1.1);
btn.alpha = 0.7;
}];
}
else if (sender.state == UIGestureRecognizerStateChanged)
{
CGPoint newPoint = [sender locationInView:sender.view];
CGFloat deltaX = newPoint.x-startPoint.x;
CGFloat deltaY = newPoint.y-startPoint.y;
btn.center = CGPointMake(btn.center.x+deltaX,btn.center.y+deltaY);
NSInteger lastIndex = [self indexOfPoint:btn.center withButton:btn];
if (lastIndex<0)
{
contain = NO;
}else
{
NSLog(@"开始%ld---结束%ld",startIndex,lastIndex);
[_resoureceItemsArr exchangeObjectAtIndex:startIndex withObjectAtIndex:lastIndex];
[UIView animateWithDuration:0.5 animations:^{
CGPoint temp = CGPointZero;
UIButton *button = _BtnItemArray[lastIndex];
temp = button.center;
button.center = originCenter;
btn.center = temp;
originCenter = btn.center;
contain = YES;
}];
}
}
else if (sender.state == UIGestureRecognizerStateEnded)
{
[UIView animateWithDuration:0.5 animations:^{
btn.transform = CGAffineTransformIdentity;
btn.alpha = 1.0;
if (!contain)
{
btn.center = originCenter;
}
//[self createTableHeader];
}];
}
}
//开始或者结束的
-(NSInteger)indexInBtnItemArray:(UIButton *)btn
{
for (NSInteger i = 0;i<_BtnItemArray.count;i++)
{
UIButton *button = _BtnItemArray[i];
if(button == btn)
{
return i;
}
}
return 0;
}
//结束的
- (NSInteger)indexOfPoint:(CGPoint)point withButton:(UIButton *)btn
{
for (NSInteger i = 0;i<_BtnItemArray.count;i++)
{
UIButton *button = _BtnItemArray[i];
if(button != btn)
{
if(CGRectContainsPoint(button.frame, point))
{
//NSLog(@"存在的%ld",i);
return i;
}
}
}
return -1;
}