问题是我必须触摸两次以拖动按钮..当我第一次触摸它使按钮和触摸的副本自动结束..现在我想要的是第一次触摸并拖动..
point = [[[event allTouches] anyObject] locationInView:self.view];
NSData *archivedData = [NSKeyedArchiver archivedDataWithRootObject:(id)touch];
UIButton * anotherButton =(id) [NSKeyedUnarchiver unarchiveObjectWithData:archivedData];
UIImage *senderImage=[(id)touch imageForState:UIControlStateNormal];
CGImageRef cgImage = [senderImage CGImage];
UIImage *copyOfImage = [[UIImage alloc] initWithCGImage:cgImage];
[anotherButton setImage:copyOfImage forState:UIControlStateNormal];
[anotherButton addTarget:self action:@selector(wasDragged:withEvent:)forControlEvents:UIControlEventTouchDragInside];
[self.view addSubview:anotherButton];
答案 0 :(得分:1)
1)声明,
@property(weak, nonatomic) IBOutlet UIButton *button;
@property(strong, nonatomic) UIButton *tempButton;
2)将手势识别器添加到按钮
UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
[self.button addGestureRecognizer:panGesture];
3)添加此句柄方法,
- (void) handlePan:(UIPanGestureRecognizer *)recognizer {
switch([recognizer state]){
case UIGestureRecognizerStatePossible : {
}break;
case UIGestureRecognizerStateBegan: {
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button setFrame:self.button.frame];
[button setTitle:self.button.titleLabel.text forState:UIControlStateNormal];
[self.view insertSubview:button belowSubview:self.button];
self.tempButton = button;
NSLog(@"UIGestureRecognizerStateBegan");
}break;
case UIGestureRecognizerStateChanged: {
CGPoint translation = [recognizer translationInView:self.view];
recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x,
recognizer.view.center.y + translation.y);
[recognizer setTranslation:CGPointMake(0, 0) inView:self.view];
}break;
case UIGestureRecognizerStateCancelled: {
}break;
case UIGestureRecognizerStateFailed: {
}break;
case UIGestureRecognizerStateRecognized: {
[self.tempButton removeFromSuperview];
self.tempButton = nil;
}break;
}
}
答案 1 :(得分:0)
这样做..
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button.frame =CGRectMake(50, 50, 100, 50);
[button setTitle:@"Move me" forState:UIControlStateNormal];
[button addTarget:self action:@selector(buttonMoved:withEvent:) forControlEvents:UIControlEventTouchDragInside];
[self.view addSubview:button];
- (IBAction) buttonMoved:(UIButton *) sender withEvent:(UIEvent *) event
{
// You can make copy of button here.. you will get button as sender
CGPoint point = [[[event allTouches] anyObject] locationInView:self.view];
sender.center = point;
}