ios – Touch拖动输入如何工作?

前端之家收集整理的这篇文章主要介绍了ios – Touch拖动输入如何工作?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
任何人都可以给我一个关于触摸拖动输入以从一个按钮拖动到另一个触发两个按钮事件的示例.
它是如何工作的?

例如,我想从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");
}

哦,我已经看到,当我按住Simulator时,会触发方法btnDragOut.当我从Simulator拖出按钮时,会触发此按钮的方法.
现在我希望当我拖出一个按钮(手指仍在模拟器中)时触发方法btnDragOut.有谁知道吗?

解决方法

您可以通过Storyboard或viewDidLoad方法中的代码将UIPanGestureRecognizer添加到您的UIViewController子类视图中:
UIPanGestureRecognizer *gestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handleDrag:)];
[self.view addGestureRecognizer:gestureRecognizer];

然后你可以在被拖动的当前UIButton的UIViewController子类的实现文件添加属性

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

现在在action方法中,您可以检测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;
    }
}
原文链接:https://www.f2er.com/iOS/331830.html

猜你在找的iOS相关文章