澄清:在Xcode和速度使用UIPanGestureRecognizer確定刷卡方向過於敏感和方向
我想要實現的是:滑動手勢(上,下,左,右)是在WebView上。當發生任何手勢時,這就是它需要發生的事情:一旦滑動開始,就必須開始一個動作(動作實際上是加載一個HTML鏈接,它將ip攝像頭移動到上,下,右,左)。 html鏈接使攝像機一路向右或向左或向上或向下。我有另一個HTML鏈接,當加載將告訴IP攝像頭停止。
所以它需要發生什麼事是當狀態是UIGestureRecognizerStateBegan鏈路負載不斷移動相機,直到用戶沒有觸摸屏幕和狀態變爲UIGestureRecognizerStateEnded並觸發其他HTML鏈接到的WebView哪個環節運行將阻止相機移動。正如我們所說的,我發佈的初始代碼是這樣做的,但是滑動過於敏感。這個問題已經被你的代碼解決了,但是現在第二個鏈接立即在第一個鏈接之後加載,而不允許相機移動。是否有意義??第一個鏈接需要運行,直到手指擡起。
原題:
我試圖在UIPanGestureRecognizer,我設法用速度來確定刷卡方向和它檢測到的左,右,上,下揮筆,它會觸發基於適當的行動在滑動方向上,當UIGestureRecognizerStateEnded對每個滑動操作時,再次進行正確的操作,但是,我在下面的代碼中遇到的問題是方向非常敏感,例如在向右滑動時,它會識別滑動的大部分,還有一些在兩者之間上下滑動。由於滑動並不總是完美的在一條直線上,我想要找到的僅僅是如果滑動大部分向右滑動並忽略微小的像素偏差,纔會觸發向右滑動的動作。
此外,對於我的項目來說,理想的情況是僅在UISwipeGestureRecognizer中觸發指定滑動方向的動作,但使用它我有UIGestureRecognizerStateEnded問題,因爲它不會讓滑動動作運行,直到我解除我的手指離開屏幕,即使手指仍在滑動,它立即完成了滑動動作。
任何幫助將不勝感激。這裏是我的代碼:
在viewDidLoad中我有:
UIPanGestureRecognizer *gestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
[_myWebView addGestureRecognizer:gestureRecognizer];
[gestureRecognizer setMinimumNumberOfTouches:1];
[gestureRecognizer setMaximumNumberOfTouches:1];
,並在我的課,我有:
- (void)handleGesture:(UIPanGestureRecognizer *)gestureRecognizer
{
CGPoint velocity = [gestureRecognizer velocityInView:_myWebView];
if(velocity.x > 0)//right
{
//my action here
if ([gestureRecognizer state] == UIGestureRecognizerStateEnded)
{ //my action when swipe finished here }
}
else if(velocity.x < 0)//left
{
//my action here
if ([gestureRecognizer state] == UIGestureRecognizerStateEnded)
{ //my action when swipe finished here }
}
else if(velocity.y > 0)//down
{
//my action here
if ([gestureRecognizer state] == UIGestureRecognizerStateEnded)
{ //my action when swipe finished here }
}
else if(velocity.y < 0)//up
{
//my action here
if ([gestureRecognizer state] == UIGestureRecognizerStateEnded)
{ //my action when swipe finished here }
}
謝謝你,任何澄清請詢問。
好的,這個解決方案能正確識別右,左,上,下,但我的其他問題仍然存在。一旦識別到有效的刷卡並立即結束,即使手指仍在刷卡,觸發我的其他操作,操作立即開始。我的第一個動作就是在我開始滑動時開始第一個動作,並且只在手指關閉時觸發第二個動作纔開始動作。 – Dashony
感謝解決方案Rob,因爲我的刷卡問題,現在滑動方向被正確識別,只觸發一次而不是15次。我上面的代碼的一個大問題是,現在它不能識別我的手指離開了屏幕,所以只有在通過將手指從屏幕上擡起來完成滑動時纔會調用UIGestureRecognizerStateEnded,然後我的第二個動作開始。希望我清楚,如果沒有,我會盡力給更多的信息。 – Dashony
感謝您對我進行編輯。我正要去但我注意到你做到了。所以謝謝 – Dashony