簡體   English   中英

如何在自定義UIButton上獲取分接頭坐標?

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

我在iPad上使用XCode 4.4開發iOS 5,並在創建自定義按鈕時使用Storyboard布局。

我有正確的觸摸事件工作和記錄,但現在我想在我的自定義按鈕上獲得點擊的x / y坐標。

如果可能的話,我希望坐標相對於自定義按鈕而不是相對於整個iPad屏幕。

這是我在.h文件中的代碼:

- (IBAction)getButtonClick:(id)sender;

和.m文件中的代碼:

    - (IBAction)getButtonClick:(id)sender {

        NSLog(@"Image Clicked.");
    }

就像我說的那樣,當我點擊圖像時正確記錄。

如何獲得水龍頭的坐標?

我從互聯網上嘗試了一些不同的例子,但是當它在日志框中顯示一堆數字(可能是坐標)時它們總是會凍結。 我是iOS開發的新手,所以請盡可能簡單。 謝謝!

要獲取觸摸位置,您可以使用按鈕操作方法的另一種變體: myAction:forEvent:如果您從IB界面中創建它,請在參數字段中選擇“發件人和事件”選項: 在此輸入圖像描述

然后在您的操作處理程序中,您可以從事件參數獲取觸摸位置,例如:

- (IBAction)myAction:(UIButton *)sender forEvent:(UIEvent *)event {
    NSSet *touches = [event touchesForView:sender];
    UITouch *touch = [touches anyObject];
    CGPoint touchPoint = [touch locationInView:sender];
    NSLog(@"%@", NSStringFromCGPoint(touchPoint));
}

除了Swift 3.0之外,接受的答案是相同的,除了語法將改變如下:

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)")
  }

對於您的整體坐標(參考屏幕),您需要創建一個包含觸摸坐標的CGPoint 但要做到這一點,你需要先觸摸它。 因此,首先獲取觸摸事件,然后使用locationInView方法創建該點。 現在,根據您要記錄觸摸的時間 - 當用戶觸摸時,或者當他們抬起手指時 - ,您必須在touchesBegantouchesEnded方法中實現此代碼。 假設你做了touchesEnded ,它傳遞了包含所有觸摸事件的NSSet cales“touches”。

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

“touchPoint”現在將包含用戶抬起手指的點。 要打印出坐標,只需訪問該點的x和y屬性:

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

那應該輸出觸摸的坐標。 現在讓它參考你正在使用的任何按鈕,我建議你只需從該點手動減去按鈕坐標的值。 這似乎是一個簡單的解決方案,老實說,我不知道如何通過引用另一個對象獲取坐標,除非您基於該對象創建視圖,並將其傳遞給locationInView而不是self.view

有關接觸更多的信息,有一個很大的套教程在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM