2013-06-13 61 views
1

我在我的應用程序中有一個虛擬鍵盤,帶有6個鍵,整個事物只是一個用UIImageView實現的圖像。我確定對應於每個「關鍵」的圖像的準確的x和y座標,並且用下面的代碼來與鍵盤交互的用戶響應:尋找替代touchesMoved來檢測定義區域內的任何觸摸事件?

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch * touch = [[event allTouches] anyObject]; 
    CGPoint point = [touch locationInView:touch.view]; 
    if(point.y < 333 && point.y > 166 && point.x < 72 && point.x > 65) 
    { 
    NSLog(@"Key pressed"); 
    } 
    //Repeat per key... 
} 

但是,我已認識到這個方法不是非常聰明,因爲改變手機視角(縱向到橫向)或更換設備會破壞我的x和y座標,並因此導致問題。

所以,我正在尋找一種替代方法來指定絕對的x和y值,並且一般使用touchesMoved。理想情況下,它將是一個具有特定設置的按鈕,如果它被輕敲,或者用戶將他們的手指拖入按鈕區域(即使速度很慢 - 我之前使用滑動檢測,並且需要太多的誇大的運動)。

是否可以設置一個按鈕來調用其方法,如果輕擊或者觸摸事件是否在按鈕之外開始,然後進入按鈕?如果不是,我的替代品是什麼?

謝謝SE!

+0

你可能想'轉換'你的'點'爲GL' – LAMBORGHINI

+0

看到我的答案,我把轉換點在那裏。你需要將手指拖到按鈕上才能做什麼? – LAMBORGHINI

回答

0

您需要獲取winSize屬性,該屬性將解決您在屏幕尺寸方面遇到的問題。

CGSize size = [[CCDirector sharedDirector]winSize]; 

我確實相信你在使用Cocos2D?如果是這樣,您可以使用size屬性代替硬編碼號碼。 :)

轉換您的點,用

UITouch *touch = [touches anyObject]; 
CGPoint location = [touch locationInView:[touch view]]; 
location = [[CCDirector sharedDirector]convertToGL:location]; 

,看看它的按鈕邊界/箱內,你可以嘗試:

if (CGRectContainsPoint ([self.myButton boundingBox], location) 
{ 
//Execute method 
} 

這一切都是假設你使用Cocos2D和一個CCSprite爲您的按鈕。 這應該適用於任何屏幕大小和肖像或風景:)

+0

感謝@CodeBandits的回答,但如果可能的話,我想nix整個當前的方法,我已經去設置一個專門的按鈕reposond類似。很顯然,按鈕區域內的輕按事件會觸發該方法,但是如何添加用戶觸摸被拖入按鈕區域時的觸發器? – jake9115

+0

我搜索了你想要的東西,並且我看到你在過去問過這樣的問題[這裏]。使用這種方法有問題嗎? (http://stackoverflow.com/questions/16661496/using-uicontroleventtouchdragenter-to-trigger-a-buttons-method-but-doesnt-w) – LAMBORGHINI

+0

它運作良好的一個非常具體的目的,但總體來說不是一個友好的在其他地方可移植地使用相同的代碼。如果我能找到一種只使用UIButton屬性的方法,它會更有幫助!我在這裏發佈我的規格:http://stackoverflow.com/questions/17077889/triggering-a-uibuttons-method-when-user-drags-finger-into-buttons-area – jake9115