UIGestureRecognizer是具体手势识别器类的抽象基类。手势识别器对象(或简称为手势识别器)解耦用于识别手势并对该识别进行操作的逻辑。当这些对象中的一个识别出共同的手势,或者在某些情况下,手势发生变化时,它会向每个指定的目标对象发送一个动作消息。
我有一个简单的设置:有2个同级UIView A和B,B完全覆盖A(但它是透明的,所以A是可见的): ┌────────────────┐ │ 视图A │ │ │ │ ┌──────────...
在iOS中获取UIGestureRecognizer的Action
我在 NSLog 中的 – tableView:didSelectRowAtIndexPath 方法中打印了 UITableviewCell 的手势: 我在 NSLog 中的 – tableView:didSelectRowAtIndexPath 方法中打印了 UITableviewCell 的手势 <UIScrollViewPanGestureRecognizer: 0x11e92080; state = Possible; cancelsTouchesInView = NO; delaysTouchesEnded = NO; view = <UITableViewCellScrollView 0x11e94bf0>; target= <(action=handlePan:, target=<UITableViewCellScrollView 0x11e94bf0>)>> 我已将此 UIScrollViewPanGestureRecognizer 分配给 UIGestureRecognizer 以访问它的属性,如下所示, UIGestureRecognizer *myGes=[temp.gestureRecognizers objectAtIndex:1]; 我能够访问“myGes”的所有属性 myGes.state; myGes.cancelsTouchesInView; myGes.delaysTouchesEnded; myGes.view; 除了一个名为 target 的属性。 是否有可能访问该财产?因为我需要执行该操作。 如有任何意见或建议,我们将不胜感激。 提前谢谢您。 有一种方法可以获取该属性的访问权限target,但我不确定这种方法是否会通过苹果的审批流程。 NSMutableArray *targets = [myGes valueForKeyPath:@"_targets"]; id targetContainer = targets[0];//get first target for example id targetOfMyGes = [targetContainer valueForKeyPath:@"_target"]; NSLog(@"%@", targetOfMyGes );//you can see reference for target object 谢谢neilco - 他的回答有助于创建解决方案。 注意:对象的确切类targetOfMyGes需要您自己定义。默认情况下它 id - 适用于任何对象类别。 UIGestureRecognizer内部维护着一个目标数组。没有对该数组的公共访问。 我今天遇到了这个问题,意识到我可以简单地使用 UIGestureRecognizer 的 delegate,因为这与我情况下的主要目标相同。 我有一个不同的解决方案,这对我有用。 这更多的是设计上的改变……您无法从捕获的手势访问目标。 因此,在着陆发生时和平移开始之前保留对对象的引用。 @property (nonatomic, strong) UIButton *myTouchedButton; // reference to button (void)init { ... [card.button addTarget:self action:@selector(cardTouchDownInside:) forControlEvents:UIControlEventTouchDown]; ... } -(void)cardTouchDownInside:(id)sender { NSLog(@"touch down on object"); self.myTouchedButton = (UIButton*)sender; }
UIGestureRecognizerState.Ended 在某些情况下不会被调用
当我拖动视图并将其放到新位置时,每次都会调用 Ended 。 当我拖动视图一段时间并将其放在开始的同一位置时,没有任何内容被调用,我期望 .Ended 或
为什么我收到此消息:[SystemGestureGate] <0x102210320> 手势:系统手势门超时
我的 iOS Swift 5 (Xcode 14.1) 应用程序正在运行。上次 Xcode 更新后,我注意到当我在导航控件内的堆栈内推送带有表视图的特定视图控制器时......
我在我的 iOS 应用程序中有一个设置,其中有两个 UIScreen(因此有两个 UIWindows) - 一个在设备上,另一个在外部显示器上。 我希望用户能够在他们的设备上做出手势...
按下时,UILongPressGestureRecognizer 会被调用两次
我正在检测用户是否按下了2秒: UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer 分配] 初始化WithTarget:
从手势识别器内的 Swift 单元格内访问 tableview 的属性
我有一个 UITapGestureRecognizer 附加到 Swift 中表格视图单元格内的图像。 当用户点击图像时,我想访问包含
interactivePopGestureRecognizer 损坏根视图控制器上的导航堆栈
在我的 UINavigationController 中,我添加了自定义后退按钮,其副作用是无法再从左向右滑动以弹出视图控制器并导航回来。 所以我实施了
在 Swift 中点击警报控制器后,应用程序会忘记当前的视图控制器和表视图
我遇到了问题,在使用 Action 方法启动 AlertController 后,我的应用程序似乎忘记了当前的视图控制器及其属性(即 tableView)。 例如,在
UITapGestureRecognizer 在 iOS 中的自定义 UIView 中未触发
我目前在 Swift 开发的 iOS 应用程序中的自定义 UIView 类中面临 UITapGestureRecognizer 的问题。虽然我确实按照惯例设置了手势识别器,但似乎...
使用 UIPinchGestureRecognizer 进行捏合缩小
奇怪的是,我的应用程序的 UIPinchGestureRecognizer 使得将手指移动到一起会放大,将手指分开会缩小 - 这与 iOS 的正常工作方式相反。 我确实...
我正在尝试实现将改变单位方向的游戏控制 移动。因此,如果我向右滑动,它会向右滑动,如果我向下滑动,它会向右滑动,等等。 是可可...
我有一个视图,我想在其中执行向右滑动的手势。不幸的是我收到错误 EXC_BAD_ACCESS。有人知道这里出了什么问题吗?请看下面的代码。 扩展
UITapGestureRecognizer 不适用于 .began 状态
我在 UIView 中添加了两个手势识别器: func tap(发送者:UITapGestureRecognizer){ if sender.state == .began { print("拍照") } } func longPress(发件人:
我想在检测到第二次触摸后停止滚动并用我自己的捏合手势处理触摸。 我在滚动视图中尝试过: - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { ...
自定义 UIControl 不适用于 UITapGestureRecognizer
当UITapGestureRecognizer没有添加到视图中时,UIButton和CustomControl都会收到.touchUpInside事件。然而,当 UITapGestureRecognizer 添加到视图中时,o...
自定义 UIControl 不适用于 UITapGestureRecognizer
当UITapGestureRecognizer没有添加到视图中时,UIButton和CustomControl都会收到.touchUpInside事件。然而,当 UITapGestureRecognizer 添加到视图中时,o...
我创建了一个滑块(用作视频控制,就像 YouTube 底部的那样)并设置最大值(持续时间)和最小值。然后使用SeekToTime更改currentTime。现在,那个...
我有一个交互式地球仪,我想检测地球仪上的点击,这样我就可以获得它们的 3d 位置。 当我重写函数 public override func TouchesBegan(_ Touchs: Set, with
我有一个简单的应用程序,其中一个 ViewController 包含一个非常小的视图层次结构:DrawingView(UIView 的子类)和三个 ImageView(每个都是 DrawingView 的子类)。 里面