How do I get the tap coordinates on a custom UIButton?

前端 未结 3 640
[愿得一人]
[愿得一人] 2020-12-16 19:09

I\'m using XCode 4.4 developing for iOS 5 on an iPad and am using the Storyboard layout when creating my custom button.

I have the touch event correctly working and

相关标签:
3条回答
  • 2020-12-16 19:48

    For your overall coordinates (with reference to the screen), you need to create a CGPoint that contains the coordinates of your touch. But to do that, you need to get that touch first. So start by getting the touch event, then by making that point using the locationInViewmethod. Now, depending on when you want to log the touch - when the user touches down, or when they lift their finger -, you have to implement this code in the touchesBegan or touchesEnded method. Let's say you do touchesEnded, which passes an NSSet cales "touches" containing all the touch events.

    UITouch *tap = [touches anyObject];
    CGPoint touchPoint = [tap locationInView:self.view];
    

    "touchPoint" will now contain the point at which the user lifts their finger. To print out the coordinates, you just access the x and y properties of that point:

    CGFloat pointX = touchPoint.x;
    CGFloat pointY = touchPoint.y;
    NSLog(@" Coordinates are: %f, %f ", pointX, pointY);
    

    That should output the coordinates of the touch. Now to have it be referenced to whatever button you're using, I would suggest you just manually subtract the values for the button's coordinates from the point. It seems like a simple solution, and honestly I don't know a way of getting coordinates with reference to another object, unless you make a view based on that object, and pass it to locationInView instead of self.view.

    For more info on touches, there's a great set of tutorials here.

    0 讨论(0)
  • 2020-12-16 19:49

    To get touch location you can use another variant of button action method: myAction:forEvent: (if you create it from IB interface note "sender and event" option in arguments field: enter image description here)

    Then in your action handler you can get touch location from event parameter, for example:

    - (IBAction)myAction:(UIButton *)sender forEvent:(UIEvent *)event {
        NSSet *touches = [event touchesForView:sender];
        UITouch *touch = [touches anyObject];
        CGPoint touchPoint = [touch locationInView:sender];
        NSLog(@"%@", NSStringFromCGPoint(touchPoint));
    }
    
    0 讨论(0)
  • 2020-12-16 20:00

    Incase of Swift 3.0 the accepted answer works same except syntax will be changed as follows:

    Swift 3.0:

     @IBAction func buyTap(_ sender: Any, forEvent event: UIEvent) {
         let myButton = sender as! UIButton
         let touches = event.touches(for: myButton)
         let touch = touches?.first
         let touchPoint = touch?.location(in: myButton)
         print("touchPoint\(touchPoint)")
      }
    
    0 讨论(0)
提交回复
热议问题