2014-02-06 71 views
-1

我正在寫一個iOS應用程序,我似乎無法弄清楚如何做連續觸摸事件。我嘗試使用「touchesBegan」和「touchesEnd」功能,但這些功能不適用於連續觸摸。連續觸摸的iOS事件

所以基本上我現在所擁有的是如下:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [super touchesBegan:touches withEvent:event]; 

    UITouch *touch = [touches anyObject]; 
    if([touch view] == [self viewWithTag:kTag]) 
    { 
     CGFloat yOffset = contentView.contentOffset.y; 
     yOffset ++; 
     [contentView setContentOffset:CGPointMake(0, yOffset)]; 
    } 
} 

但是我想要的內容偏移無限期繼續,只要轉移我的手指觸摸給定的視圖。現在它在一次迭代之後停止。

+2

你在找什麼?如果你碰到觸碰,那麼它是連續的,直到你收到touchesEnded。 – rmaddy

+0

^看看我上面的編輯 – user1855952

回答

1

看來你需要設置在touchesBegan重複的計時器。每次定時器觸發時,更新偏移量。取消touchesEndedtouchesCanceled方法中的計時器。

+0

我從來沒有聽說過iOS中的重複計時器。你能詳細說明嗎?我將如何去實施一個? – user1855952

+0

查看「NSTimer」的文檔。有些參數用於在創建計時器時設置重複。 – rmaddy

+0

很酷,謝謝我會檢查出來 – user1855952

3

您是否在尋找touchesMoved方法?有這樣一種方法,你可以使用它。

UPDATE

馬迪的解決方案應該與觸摸工作。

或者,你可能想看看下面的控制事件的方法:根據您的更新問題

- (BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event

+0

OP不希望'touchesMoved'方法。這個想法是用戶只需將手指放在屏幕上,手指保持聯繫即可移動。無需移動手指。 – rmaddy

+0

謝謝Maddy。我已經同意我的回答聽起來更像是一個評論,這本質上是試圖瞭解需求。我只有1個聲望,因此無法發表評論。話雖如此,我們可以在長按手勢識別器中指定持續時間並利用它。更新了我的答案。 – Rajiv

+0

長按手勢也不起作用。只有在達到長按持續時間後纔會發送事件,然後隨着手指的移動,手指擡起時發出事件。OP需要一整套手指在一個地方放置的事件。 – rmaddy

1

感謝Maddy的提示。在觸摸有關NSTimer的信息時,我得到了重複的操作。

我確實有它的每個點擊屏幕的時間做一個動作:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
[rocket.physicsBody applyForce:CGVectorMake(0,200)]; 
} 

但這隻會每點擊觸發。我希望它在觸摸屏幕時繼續施加力量。

計時器添加到類:

@interface TPMyScene() 
@property (nonatomic, retain, readwrite) NSTimer * touchTimer; 
@end 

移動我的行動的方法:

-(void)boost { 
    NSLog(@"Boosting"); 
    [rocket.physicsBody applyForce:CGVectorMake(0,200)]; 
} 

觸發計時器在的touchesBegan:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    // First we need to trigger a boost in case the screen was just touched. 
    [rocket boost]; 

    //set a timer to keep boosting if the touch continues. 
    //Also check there isn't already a timer running for this. 
    if (!self.touchTimer.isValid) { 
     self.touchTimer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:rocket selector:@selector(boost) userInfo:nil repeats:YES]; 
    } 
} 

取消計時器觸摸時以結束或取消結束:

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    [self.touchTimer invalidate]; 
} 

-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event { 
    [self.touchTimer invalidate]; 
} 
+0

我的第一次觸動開始只有計時器有一個錯誤,一旦我開始測試... 1.計時器只在0.1秒後開火,所以觸摸/在任何跑步之前取消。 2.多點觸摸:第二次觸摸會創建一個新的定時器,並失去原來的鏈接。無效只會阻止新的一個,舊的永遠持續發射! – TPot