Как работает Touch drag enter?
может ли кто-нибудь дать мне пример о сенсорном перетаскивании enter, чтобы перетащить с кнопки на другую, которая запускает событие обеих кнопок. И как это работает?
например, я хочу перетащить из Do в Fa, что событие Do, Re, Mi, Fa срабатывает.
вот мой код:
- (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;
}
}