【问题标题】:Drag and drop without removing UIBUTTONs拖放而不删除 UIBUTTON
【发布时间】:2013-05-13 13:45:48
【问题描述】:

问题是我必须触摸两次才能拖动按钮..当我第一次触摸时,它会自动复制按钮并触摸结束..现在我想要的是第一次触摸并拖动..

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];

【问题讨论】:

    标签: ios drag-and-drop uibutton


    【解决方案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;
        }
    }
    

    【讨论】:

      【解决方案2】:

      这样做吧..

      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;
       }
      

      【讨论】:

      • 此代码不会复制您触摸过的按钮..我之前尝试过...
      • 为什么要复制按钮??
      • 因为 em 在我的自定义键盘上使用它。假设如果您触摸 a 按钮,那么它会复制一个按钮,就像其他按钮 b、c、d、e、f 一样, g等..
      猜你喜欢
      • 1970-01-01
      • 2014-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多