簡體   English   中英

使用UIPanGestureRecognizer進行多點觸控

[英]Multitouch with UIPanGestureRecognizer

我正在嘗試為我的視圖實現UIPanGestureRecognizer。 如何添加多點觸控? 下面是我視圖中的代碼(UIView的子類)。 我希望能夠同時知道所有觸摸的位置和速度。 當前代碼僅打印一次觸摸的位置和速度。 更改屬性minimumNumberOfTouches和maximumNumberOfTouches不起作用。 非常感謝您的幫助。

UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanGesture:)];
panGestureRecognizer.cancelsTouchesInView = NO;
[self addGestureRecognizer:panGestureRecognizer];


- (void)handlePanGesture:(UIPanGestureRecognizer *)panGestureRecognizer
{
    CGPoint location = [panGestureRecognizer locationInView:panGestureRecognizer.view];
    CGPoint velocity = [panGestureRecognizer velocityInView:panGestureRecognizer.view];

    NSLog(@"Location: %@",  NSStringFromCGPoint(location));
    NSLog(@"Velocity: %@",  NSStringFromCGPoint(velocity));

}

來自UIGestureRecogniser的蘋果文檔

(CGPoint)locationOfTouch:(NSUInteger)touchIndex inView:(UIView *)視圖參數touchIndex接收方維護的專用數組中UITouch對象的索引。 該觸摸對象表示當前手勢的觸摸。 view發生手勢的UIView對象。 指定nil以指示窗口。 返回值視圖的局部坐標系中的一個點,用於標識觸摸的位置。 如果為視圖指定了nil,則該方法返回窗口基本坐標系中的觸摸位置。

(NSUInteger)numberOfTouches返回值接收方維護的專用數組中的UITouch對象數。 這些對象中的每一個表示當前手勢中的觸摸。

討論在循環中使用此方法返回的值,您可以使用locationOfTouch:inView:方法詢問各個觸摸的位置。

例如:

(目標C)

    for(int i=0; i<[panGestureRecogniser numberOfTouches]; i++)
    {
         CGPoint pt = [panGestureRecogniser locationOfTouch:i inView:self];
    }

(迅速)

    for i in 0..<panGestureRecogniser.numberOfTouches {
         let pt = recognizer.location(ofTouch: i, in: panGestureRecognizer.view)
    }

至於速度,我相信它只有一個值,並且沒有辦法在不編寫自定義方法的情況下獲得每次觸摸的速度,該方法計算一系列調用中每次觸摸之間的差異。 然而,無法保證每次觸摸都在相同的索引處。

注意:對於最小和最大觸摸次數,需要相應地設置這些觸摸以獲得多次觸摸。

暫無
暫無

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

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