簡體   English   中英

如何控制UIPanGestureRecognizer的識別?

[英]How to control the recognition of UIPanGestureRecognizer?

對於UITapGestureRecognizer,您可以設置控制UITapGestureRecognizer識別所需的抽頭數。 如果將numberOfTapsRequired設置為2並且用戶只點擊一次,則不會觸發UITapGestureRecognizer。

我的問題是UIPanGestureRecognizer怎么樣? 如何控制其認可?

我有一個觀點。 一旦我為它設置了UIPanGestureRecognizer,任何拖動都會觸發該動作。 但我想要的只是在X軸上拖動。 對於非X軸拖動,應將所有觸摸事件發送到下面的其他視圖。

我該怎么做?

謝謝

設置其委托並實施

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer;

然后用

- (CGPoint)velocityInView:(UIView *)view;

在手勢識別器上計算手勢識別器是否應該處理它。

假設您的gestureRecognizer觸發下面的_panRecogPanned操作。 您可以看到子視圖的中心(帶有手勢識別器本身的視圖)如何在轉換后移動。 要禁用y軸上的平移,只需將中心設置為計算的新中心,而省略translation.y。

要在y軸上移動其他子視圖,獲取其框架,更新其origin.x屬性並重置框架,它們應僅在y軸上跟隨您的手指。

- (IBAction)_panRecogPanned:(id)sender{

    CGPoint translation = [_panRecog translationInView:_statementFilterView];

    //This subview only moves horizontally
    _panRecog.view.center = CGPointMake(translation.x + _panRecog.view.center.x, _panRecog.view.center.y);

    //This subview only moves vertically
    CGRect newFrame = anotherSubview.frame;
    newFrame.origin.y = anotherSubview.frame.origin.y + translation.y;
    anotherSubview.frame = newFrame;

    [_panRecog setTranslation:CGPointMake(0, 0) inView:self.view];
}
UIView *holderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, image.size.width, image.size.height)];
UIImageView *imageview = [[UIImageView alloc] initWithFrame:[holderView frame]];
[imageview setImage:image];
[holderView addSubview:imageview];

UIPinchGestureRecognizer *pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(scale:)];
[pinchRecognizer setDelegate:self];
[holderView addGestureRecognizer:pinchRecognizer];

UIRotationGestureRecognizer *rotationRecognizer = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotate:)];
[rotationRecognizer setDelegate:self];
[holderView addGestureRecognizer:rotationRecognizer];

UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(move:)];
[panRecognizer setMinimumNumberOfTouches:1];
[panRecognizer setMaximumNumberOfTouches:1];
[panRecognizer setDelegate:self];
[holderView addGestureRecognizer:panRecognizer];

UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)];
[tapRecognizer setNumberOfTapsRequired:1];
[tapRecognizer setDelegate:self];
[holderView addGestureRecognizer:tapRecognizer];

[self.view addSubview:holderView];

Raees

暫無
暫無

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

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