标签: uigesturerecognizer

Swift3 iOS - 如何制作UITapGestureRecognizer触发器功能

我正在尝试添加一个UITapGestureUIButton,以便在点击时触发一个函数.我正在使用Swift 3并且收到一些错误:

由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [SwiftRunner.ViewController tapBlurButton]:无法识别的选择器发送到实例0x149e07610'

这大致是我所拥有的:

// Swift 3
import UIKit
class ViewController {

   @IBOutlet weak var qsBlurButton: UIButton!       

   override func viewDidLoad() {
      super.viewDidLoad()

      let tapGesture = UITapGestureRecognizer(target: self, action: Selector(("tapBlurButton")))
      qsBlurButton.addGestureRecognizer(tapGesture)
   }

   func tapBlurButton(sender: UITapGestureRecognizer) {
      print("Please Help!")
   }
}
Run Code Online (Sandbox Code Playgroud)

uigesturerecognizer ios swift swift3

48
推荐指数
3
解决办法
7万
查看次数

为什么我收到此消息:[SystemGestureGate] <0x102210320> 手势:系统手势门超时

我的 iOS Swift 5 (Xcode 14.1) 应用程序正在运行。上次 Xcode 更新后,我注意到当我在导航控制器内的堆栈中推送带有表视图的特定视图控制器时,我收到以下警告:

[SystemGestureGate] <0x102210320> 手势:系统手势门超时

当我向后滑动以弹出有问题的视图控制器时,它的行为不稳定,有时弹出得很好。我所说的“不稳定”是指有时它会部分显示目标视图控制器,有时会在滑动中间冻结一两秒等。当我尝试再次推入有问题的视图控制器时(出现警告后),它会冻结应用程序。

视图控制器、堆栈、表格和单元格没有自定义手势识别器。

我在应用程序的其他地方没有看到这个警告(包括带有堆栈和表格的视图控制器)。

我的问题是:

  1. 什么是“SystemGestureGate:系统手势门超时”?我在网上没有找到关于这个错误的实质性信息。
  2. 会产生此类警告的条件是什么?

我怀疑我正在使用的表有问题,正在进一步调查。

我采取的一些故障排除步骤:

  • 当我完全删除桌子时,警告和行为就会消失。
  • 当我部分删除表格(一两个部分)时,警告和行为会随机发生(我找不到模式)。
  • 我放置了断点,发现错误发生在 之后viewWillAppear,但之前viewDidAppear

我期望视图控制器将以与导航控制器中所有其他视图控制器相同的方式滑动来弹出。

uigesturerecognizer ios swift

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

UIGestureRecognizer和UITableViewCell问题

我在这样的方法中附加一个UISwipeGestureRecognizera :UITableViewCellcellForRowAtIndexPath:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

        UISwipeGestureRecognizer *gesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(didSwipe:)];
        gesture.direction = UISwipeGestureRecognizerDirectionRight;
        [cell.contentView addGestureRecognizer:gesture];
        [gesture release];
    }
    return cell;
}
Run Code Online (Sandbox Code Playgroud)

但是,该didSwipe方法在成功滑动时始终被调用两次.我最初认为这是因为手势开始和结束,但如果我注销gestureRecognizer本身,它们都处于"结束"状态:

-(void)didSwipe:(UIGestureRecognizer *)gestureRecognizer {

    NSLog(@"did swipe called %@", gestureRecognizer);
}
Run Code Online (Sandbox Code Playgroud)

安慰:

2011-01-05 12:57:43.478 App[20752:207] did swipe called <UISwipeGestureRecognizer: 0x5982fa0; state = Ended; view = <UITableViewCellContentView …
Run Code Online (Sandbox Code Playgroud)

iphone uitableview ipad uigesturerecognizer ios

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

结合长按手势和拖动手势

我正在移动我的观点

UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(moveRight:)];
[panRecognizer setMinimumNumberOfTouches:1];
[panRecognizer setMaximumNumberOfTouches:1];
[panRecognizer setDelegate:self];
[bubbleView[rightCnt] addGestureRecognizer:panRecognizer];
[panRecognizer release];
Run Code Online (Sandbox Code Playgroud)

现在,我希望通过长按拖动来做同样的事情.

任何的想法?

iphone objective-c uigesturerecognizer ios

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

如何在我的应用程序中实现UITapGestureRecognizer

我对编程和目标C都很陌生.我想知道如何制作一个有空白屏幕和计时器一分钟的应用程序.你的意思是尽可能快地点击,只要你可以.我想知道如何实现UITapGestureRecognizer我的代码.

user-interface objective-c uigesturerecognizer ios uitapgesturerecognizer

42
推荐指数
3
解决办法
7万
查看次数

添加UIGestureRecognizer从左到右向左滑动以查看我的视图

我有一个不同的UIStoryboard UIViewControllers,我想添加另一个UIViewController(如仪表板),当用户从左侧滑动ipad时,仪表板会出现,然后当他向后滑动时,当前视图将被恢复.

这可能吗?如果是的话有什么提示怎么做或任何好的教程UIGestureRecognizer

谢谢.

objective-c uiviewcontroller uigesturerecognizer ios swipe-gesture

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

UIGestureRecognizer是否可以在UIWebView上运行?

我试图让UIGestureRecognizer使用UIWebview,它是UIScrollView的子视图.这听起来很奇怪但是当我将numberOfTouchesRequired设置设置为2时,选择器会触发,但是当numberOfTouchesRequired设置为1时,选择器不会触发.

这是我的代码:

UITapGestureRecognizer *tap1 = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(select1:)];
    tap1.numberOfTouchesRequired = 2;
    tap1.numberOfTapsRequired = 1;
    tap1.delegate = self;
    [self.ans1WebView addGestureRecognizer:tap1];
    [tap1 release];

- (void) select1:(UILongPressGestureRecognizer *)sender {
    //Do Stuff
}
Run Code Online (Sandbox Code Playgroud)

我已经通过使用Apple样本用于UIGestureRecognizer并在其笔尖中插入webview来证实了这一点.他们的tap代码可以在webview区域内的任何地方使用.

iphone cocoa objective-c ipad uigesturerecognizer

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

拦截UIScrollView上的平移手势会中断滚动

我有一个垂直滚动UIScrollView.我还想在其上处理水平平移,同时允许默认的垂直滚动行为.我UIView在滚动视图上放置了一个透明图,并为其添加了一个平移手势识别器.这样我可以很好地获得平底锅,但滚动视图不会接收任何手势.

我已经实现了以下UIPanGestureRecognizerDelegate方法,希望仅将我的手势识别器限制为水平平底锅,但这没有帮助:

- (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer {
    // Only accept horizontal pans here.
    // Leave the vertical pans for scrolling the content.
    CGPoint translation = [gestureRecognizer translationInView:self.view];
    BOOL isHorizontalPan = (fabsf(translation.x) > fabsf(translation.y));
    return  isHorizontalPan;
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return (otherGestureRecognizer == _scrollView.panGestureRecognizer);
}
Run Code Online (Sandbox Code Playgroud)

uiscrollview uigesturerecognizer ios ios5 uipangesturerecognizer

40
推荐指数
3
解决办法
4万
查看次数

如何在UIBarButtonItem中添加UIGestureRecognizer,就像在iPad应用程序中常见的undo/redo UIPopoverController方案一样?

问题

在我的iPad应用程序中,在按下并保持事件后才能将弹出窗口附加到按钮栏项目.但这似乎是撤消/重做的标准.其他应用程序如何做到这一点?

背景

我的UIKit(iPad)应用程序的工具栏中有一个撤消按钮(UIBarButtonSystemItemUndo).当我按下撤销按钮时,它会触发它的动作,即undo:,并且正确执行.

然而,在iPad上撤消/重做的"标准UE惯例"是按下撤销执行撤消,但按住按钮会显示一个弹出控制器,用户选择"撤消"或"重做"直到控制器被解除.

附加弹出控制器的常规方法是使用presentPopoverFromBarButtonItem:,我可以很容易地配置它.要仅在按住之后显示此内容,我们必须设置视图以响应"长按"手势事件,如此代码段中所示:

UILongPressGestureRecognizer *longPressOnUndoGesture = [[UILongPressGestureRecognizer alloc] 
       initWithTarget:self 
               action:@selector(handleLongPressOnUndoGesture:)];
//Broken because there is no customView in a UIBarButtonSystemItemUndo item
[self.undoButtonItem.customView addGestureRecognizer:longPressOnUndoGesture];
[longPressOnUndoGesture release];
Run Code Online (Sandbox Code Playgroud)

有了这个,在按下并保持视图后,方法handleLongPressOnUndoGesture:将被调用,在这个方法中,我将配置并显示undo/redo的popover.到现在为止还挺好.

这个问题是没有附加视图.self.undoButtonItem是一个UIButtonBarItem,而不是一个视图.

可能的解决方案

1)[理想] 将手势识别器附加到按钮栏项目.可以将手势识别器附加到视图,但UIButtonBarItem不是视图.它确实具有.customView的属性,但当buttonbaritem是标准系统类型时(在这种情况下它是),该属性为nil.

2)使用另一个视图.我可以使用UIToolbar,但这需要一些奇怪的命中测试,并且如果可能的话首先是一个全面的黑客攻击.我无法想到使用其他替代视图.

3)使用customView属性.像UIBarButtonSystemItemUndo这样的标准类型没有customView(它是nil).设置customView将删除它需要的标准内容.这将相当于重新实现UIBarButtonSystemItemUndo的所有外观和功能,如果可能的话.

如何将手势识别器附加到此"按钮"?更具体地说,如何在iPad应用程序中实现标准的按住 - 显示 - 重做 - 弹出窗口?

想法?非常感谢,特别是如果有人真的在他们的应用程序中工作(我在想你,omni)并想分享......

cocoa-touch undo-redo uibarbuttonitem ipad uigesturerecognizer

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

禁用手势以下拉表单/页面表单模式演示

在iOS 13中,可以使用平移手势关闭使用表单和页面样式的模式演示。在我的一个表单中,这是有问题的,因为用户会拖入该框,从而干扰手势。它将屏幕下拉而不是画一条垂直线。

如何在显示为图纸的模态视图控制器中禁用垂直滑动以消除手势?

设置isModalInPresentation = true仍然允许将工作表拉下,但不会关闭。

uigesturerecognizer ios ios13

39
推荐指数
7
解决办法
5470
查看次数