Как работает Touch drag enter?

может ли кто-нибудь дать мне пример о сенсорном перетаскивании enter, чтобы перетащить с кнопки на другую, которая запускает событие обеих кнопок. И как это работает?

например, я хочу перетащить из Do в Fa, что событие Do, Re, Mi, Fa срабатывает.

iOS Simulator Screenshot

вот мой код:

- (void) setupVC {
soundBankPlayer = [[SoundBankPlayer alloc] init];
[soundBankPlayer setSoundBank:@"Piano"];
arrMusicalNotes = [NSArray arrayWithObjects:@"60", @"62", @"64", @"65", @"67", @"69", @"71", @"72", nil];
}


#pragma mark - Setup Musical Note
- (IBAction)btnMusicalNoteclick:(id)sender {
    int numOfNote = [[arrMusicalNotes objectAtIndex:((UIButton*)sender).tag] intValue];
    NSLog(@"%i", numOfNote);
    [soundBankPlayer queueNote:numOfNote gain:1.0f];
    [soundBankPlayer playQueuedNotes];
}

- (IBAction)btnDragOut:(id)sender {
    NSLog(@"Out");
}

О, я видел, что когда я держу клик из симулятора, запускается метод btnDragOut. И когда я перетаскиваю из симулятора в кнопка, метод этой кнопки срабатывает. Теперь я хочу, чтобы метод btnDragOut срабатывал, когда я вытаскиваю кнопку (палец все еще находится в симуляторе). Кто-нибудь знает?

1 ответов


вы можете добавить UIPanGestureRecognizer на ваш взгляд ваш UIViewController подкласс через раскадровку или через код viewDidLoad способ:

UIPanGestureRecognizer *gestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handleDrag:)];
[self.view addGestureRecognizer:gestureRecognizer];

затем вы можете добавить свойство в файл реализации вашего UIViewController подкласс ток UIButton тащат:

@interface YourViewController ()
@property (weak, nonatomic) UIButton *currentButton;
@end

теперь в методе действия вы можете обнаружить UIControlEventTouchDragEnter и UIControlEventTouchDragExit событий следующим образом:

- (void)handleDrag:(UIPanGestureRecognizer *)gestureRecognizer
{
    CGPoint point = [gestureRecognizer locationInView:self.view];
    UIView *draggedView = [self.view hitTest:point withEvent:nil];

    if (gestureRecognizer.state == UIGestureRecognizerStateChanged) {
        if ([draggedView isKindOfClass:[UIButton class]] && !self.currentButton) {
            self.currentButton = (UIButton *)draggedView;
            NSLog(@"Enter: %ld", (long)self.currentButton.tag);

            // send enter event to your button
            [self.currentButton sendActionsForControlEvents:UIControlEventTouchDragEnter];
        }

        if (self.currentButton && ![self.currentButton isEqual:draggedView]) {
            NSLog(@"Out: %ld", (long)self.currentButton.tag);

            // send exit event to your button
            [self.currentButton sendActionsForControlEvents:UIControlEventTouchDragExit];
            self.currentButton = nil;
        }
    } else if (gestureRecognizer.state == UIGestureRecognizerStateEnded) {
        self.currentButton = nil;
    }
}