标签: uigesturerecognizer

使用手势识别器时,表格视图不会滚动

我的应用程序有一个表格视图(当然还有滚动),这个视图使用手势识别器(就像在Facebook应用程序上一样)打开和关闭.

如果我使用按钮将[表格视图滑动到屏幕],它可以正常工作,但是当我使用手势识别器时,表格视图不能再滚动.

以下是具有问题的手势识别器代码:

[self.view addGestureRecognizer:self.slidingViewController.panGesture];
Run Code Online (Sandbox Code Playgroud)

有人有想法吗?

uitableview uigesturerecognizer ios

21
推荐指数
3
解决办法
1万
查看次数

按钮水龙头和长按手势

我的手势有些麻烦.

我试图在同一个按钮上同时使用水龙头和长按,所以我已经习惯了

@IBAction func xxx (sender: UITapGestureRecognizer)
Run Code Online (Sandbox Code Playgroud)

@IBAction func xxx (sender: UILongPressGestureRecognizer)
Run Code Online (Sandbox Code Playgroud)

但是当我点击时,我的按钮似乎对这两个功能做出了反应.可能有什么问题?

func long(longpress: UIGestureRecognizer){
    if(longpress.state == UIGestureRecognizerState.Ended){
    homeScoreBool = !homeScoreBool
    }else if(longpress.state == UIGestureRecognizerState.Began){
        print("began")
    }
}
Run Code Online (Sandbox Code Playgroud)

uigesturerecognizer ios uitapgesturerecognizer swift

21
推荐指数
1
解决办法
3万
查看次数

我可以禁用UIPageViewController的页面边框手势识别器吗?刷卡一个?

我看到我可以删除所有UIPageViewController手势,但是如果我只想删除边缘上的点按手势呢?并保持滑动手势?这可能吗?

谢谢

iphone ipad uigesturerecognizer uipageviewcontroller

20
推荐指数
1
解决办法
6936
查看次数

UITableViewCell上的UIPanGestureRecognizer会覆盖UITableView的滚动视图手势识别器

我已经分类了UITableViewCell,在那个课程中我应用了一个Pan手势识别器:

UIPanGestureRecognizer *panning = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(handlePanning:)];
panning.minimumNumberOfTouches = 1;
panning.maximumNumberOfTouches = 1;
[self.contentView addGestureRecognizer:panning];
[panning release];
Run Code Online (Sandbox Code Playgroud)

然后,我实现了委托协议,该协议应该允许在表的视图中同时进行手势:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

然后我在handlePanning方法中放置一个日志,看看它何时被检测到:

- (void)handlePanning:(UIPanGestureRecognizer *)sender {
    NSLog(@"PAN");
}
Run Code Online (Sandbox Code Playgroud)

我的问题是我无法垂直滚动查看tableview中的单元格列表,handlePanning无论我在哪个方向上调用它都会被调用.

我想要的handlePanning只是在只有水平平移而不是垂直时调用.会很感激一些指导.

cocoa-touch uigesturerecognizer ios

20
推荐指数
1
解决办法
1万
查看次数

使用Transform旋转时调整UIView的大小

当我UIView使用transform属性(CGAffineTransformMakeRotation)旋转我时,我需要拖动它的一个角,比如说右下角,以调整它的大小.在此过程中,当用户拖动角落时,视图的角落必须跟随用户的手指,并通过增加2个边(右下角拖动的右下角)来调整框的大小.

UIView当不转换框时,可以使用框架和触摸位置来调整大小并不困难.例如,我会记住UIPanGestureRecognizer handlerStateBegan上附加到此可调整大小视图的初始帧和触摸,并且在StateChanged上,我将计算触摸点X,Y与初始触摸的差异,并将这些值添加到初始帧宽度和高度.

但是,UIView当应用变换时,帧对于旋转是可靠的.因此,我只能依靠boundscenter.我创建了这个代码,但它几乎可以工作:我只能在所有4个方向上按比例放大视图,而不是一个.

- (void)handleResizeGesture:(UIPanGestureRecognizer *)recognizer {
    CGPoint touchLocation = [recognizer locationInView:self.superview];
    CGPoint center = self.center;

    switch (recognizer.state) {
        case UIGestureRecognizerStateBegan: {
            deltaAngle = atan2f(touchLocation.y - center.y, touchLocation.x - center.x) - CGAffineTransformGetAngle(self.transform);
            initialBounds = self.bounds;
            initialDistance = CGPointGetDistance(center, touchLocation);
            initialLocation = touchLocation;
            if ([self.delegate respondsToSelector:@selector(stickerViewDidBeginRotating:)]) {
                [self.delegate stickerViewDidBeginRotating:self];
            }
            break;
        }

        case UIGestureRecognizerStateChanged: {

            CGFloat scale = CGPointGetDistance(center, touchLocation)/initialDistance;
            CGFloat minimumScale = …
Run Code Online (Sandbox Code Playgroud)

iphone objective-c uigesturerecognizer ios

20
推荐指数
2
解决办法
2235
查看次数

如何在Swift中长按期间选择表格行

我有一个表有一个长按手势识别器,根据选择的表行运行代码.

我遇到的麻烦是,我现在必须点击我想要的行,然后长按.

如何让表格选择我长按的行而不必先点击选择它?

uigesturerecognizer ios swift

20
推荐指数
6
解决办法
3万
查看次数

将UILongPressGestureRecognizer与UIPanGestureRecognizer组合在一起

我喜欢将UILongPressGestureRecognizer与UIPanGestureRecognizer结合使用.

UIPanGestureRecognizer应该从长按开始.有一个简单的方法吗?还是我真的要写自己的手势识别器?

我不喜欢在主屏幕上.你按下一个图标,一段时间后图标开始摇晃.之后我没有从屏幕上松开手指,我可以开始拖动手指下的图标.

cocoa-touch objective-c uigesturerecognizer uipangesturerecognizer uilongpressgesturerecogni

19
推荐指数
4
解决办法
1万
查看次数

如何取消/重置UIGestureRecognizer

我该如何取消或重置UIGestureRecognizer?问题是,如果我设置waitForSomethingNO手势时,下一个事件是UIGestureRecognizerStateChanged.但第一件事应该是UIGestureRecognizerStateBegan.

我的代码:

- (void) panned:(UIPanGestureRecognizer *) recognizer {
    if (waitForSomething) {
        // cancel or reset the recognizer!
        // because the next event should be UIGestureRecognizerStateBegan and not UIGestureRecognizerStateChanged
        return;
    }

    switch (recognizer.state) {
        case UIGestureRecognizerStateBegan:
            // important initialisation code
            break;

        case UIGestureRecognizerStateChanged:
            // do something
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

iphone objective-c uigesturerecognizer ios

19
推荐指数
1
解决办法
8530
查看次数

super respondsToSelector:返回true但实际上调用super(selector)给出"无法识别的选择器发送到实例"

好的,我有点困惑.

我有一个UIScrollView的子类,这是我尝试像UI元素一样水平滚动"表视图".UIScrollView本身设置它在内部使用的UIGestureRecognizers,它似乎将自己设置为那些UIGestureRecognizers的委托.我在我的水平表元素/单元格上也有自己的UIGestureRecognizer设置,我自己的类设置为我自己的UIGestureRecognizer的委托.由于我的类是UIScrollView的子类,在运行时,UIGcureRecognizer委托调用来到我的类,用于UIScrollView内置的UIGestureRecognizers和我自己的UIGestureRecognizers.有点像PITA,但我们可以通过传递我们不关心的东西来解决这个问题.

-(BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
{ 
   if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]])
      return NO; 
      else
      {  
        if ([super respondsToSelector:@selector(gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:)])
           return [super gestureRecognizer:gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:otherGestureRecognizer];
           else 
           return NO;
        }
}
Run Code Online (Sandbox Code Playgroud)

问题是检查[super respondsToSelector:@selector()]返回YES,但是当我实际调用它时,return [super gestureRecognizer:gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:otherGestureRecognizer];我得到以下异常

2012-08-31 12:02:06.156 MyApp [35875:707] - [MyAppHorizo​​ntalImageScroller gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]:无法识别的选择器发送到实例0x21dd50

我本以为应该表明

- [UIScrollView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]

但那可能没问题.但问题是,它说它响应然后不响应.

另外两个UIGestureRecognizer委托例程使用此代码(显然是不同的选择器).

感谢您的任何见解.

delegates objective-c super uigesturerecognizer respondstoselector

19
推荐指数
3
解决办法
4923
查看次数

如何在保持单元格选择的同时向UICollectionView添加点击手势?

任务

添加单击手势UICollectionView,不要妨碍单元格选择.

我想在collectionView的无单元格部分进行一些其他的点击.

使用XCode8,Swift 3.

override func viewDidLoad() {
    ...
    collectionView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(tap)))
}

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    print(indexPath)
}

func tap(sender: UITapGestureRecognizer){
    print("tapped")
}
Run Code Online (Sandbox Code Playgroud)

结果

是的,它现在阻碍了它.当您点击单元格时,它会记录"轻拍".

分析

  • 我检查了collectionView和单元格的hitTest返回值.两者都返回了tapped单元格,这意味着它们形成了Cell - > CollectionView的响应链
  • 细胞上没有手势
  • 关于collectionView的3个手势,似乎没有人使用单元格选择
    • UIScrollViewDelayedTouchesBeganGestureRecognizer
    • UIScrollViewPanGestureRecognizer
    • UITapGestureRecognizer
  • callStack,似乎单元格选择具有不同的堆栈跟踪与手势的目标 - 动作模式.
  • 双击手势与单元格选择一起使用.

找不到更多的痕迹.有关如何实施细胞选择或实现此任务的任何想法?

uiresponder uigesturerecognizer ios uicollectionview swift

19
推荐指数
2
解决办法
2万
查看次数