Search code examples
uitouchuievent

UITouch / UIEvent - delaying the event?


Is there any way to delay the event of this touchBegan function?

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *followTouch = [[event allTouches] anyObject];

bull.center = [followTouch locationInView:followTouch.view];}

Solution

  • Here is an example. It animates the movement of a square a half second after the touch moves:

    -(void)pan:(UIPanGestureRecognizer *)pan {
        CGPoint touchLocation = [pan locationInView:self.view];
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.5 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
            self.square.center = touchLocation;
        });
    }
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
        UIView *square = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 10)];
        square.backgroundColor = [UIColor redColor];
        self.square = square;
        [self.view addSubview:square];
        UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];
        [self.view addGestureRecognizer:pan];
    }