Objective-C 中的 UIScreenEdgePanGestureRecognizer

Posted

技术标签:

【中文标题】Objective-C 中的 UIScreenEdgePanGestureRecognizer【英文标题】:UIScreenEdgePanGestureRecognizer in Objective-C 【发布时间】:2020-07-24 02:39:25 【问题描述】:

我正在学习objective-c,不知道这段代码是做什么的。我了解 UIScreenEdgePanGestureRecognizer 的作用。但是,我对这段代码对 UIScreenEdgePanGesture 的作用感到困惑。

UIScreenEdgePanGestureRecognizer *rightRecog = 
[[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(resetChart:)];
[rightRecog setEdges:UIRectEdgeRight];
[rightRecog setCancelsTouchesInView:YES];

[self.chartView addGestureRecognizer:rightRecog];

UIScreenEdgePanGestureRecognizer *leftRecog = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(resetChart:)];

[leftRecog setEdges:UIRectEdgeLeft];
[leftRecog setCancelsTouchesInView:YES];

[self.chartView addGestureRecognizer:leftRecog];

【问题讨论】:

【参考方案1】:

这是一个用于定义UIPanGestureRecognizer 的代码模式,用于从屏幕中心的右侧和左侧检查设备屏幕边缘上的手指/笔触摸,但会取消任何触摸事件同时发生在视图内部。

识别器绑定到self.chartView 以观察这些手势。

它还定义了一个方法@selector(resetChart:),当手指滑入图表视图的一侧时,该方法将采取行动(动作)。但是 -resetChart: 方法将是您定义识别器的 ViewController 类或视图类的一部分,其中定义为 (self)。

UIScreenEdgePanGestureRecognizer *rightRecog = 
[[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(resetChart:)];
[rightRecog setEdges:UIRectEdgeRight];
[rightRecog setCancelsTouchesInView:YES];
[self.chartView addGestureRecognizer:rightRecog];

上面的代码是从右侧设置识别器。 下面的代码对左侧执行相同的操作,但会触发相同的方法。

UIScreenEdgePanGestureRecognizer *leftRecog = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(resetChart:)];
[leftRecog setEdges:UIRectEdgeLeft];
[leftRecog setCancelsTouchesInView:YES];
[self.chartView addGestureRecognizer:leftRecog];

所以它可以像这样融化在一起..

UIScreenEdgePanGestureRecognizer *rightLeftRecog =
[[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(resetChart:)];
[rightLeftRecog setEdges:UIRectEdgeRight|UIRectEdgeLeft];
[rightLeftRecog setCancelsTouchesInView:YES];
[self.chartView addGestureRecognizer:rightLeftRecog];

因为-resetChart: 也在做同样的事情。

看起来像

-(void)resetChart:(UIScreenEdgePanGestureRecognizer*)gesture 
    //do some stuff with the gesture or amount of fingers used.

【讨论】:

以上是关于Objective-C 中的 UIScreenEdgePanGestureRecognizer的主要内容,如果未能解决你的问题,请参考以下文章

Objective-C中的方法重载?

Objective-C中的SEL (转载)

Objective-C 中的 UIScreenEdgePanGestureRecognizer

Objective-C中的引用计数

Objective-c中的点符号

Swift 中的 Objective-C 协议