代码中的假平移手势

Posted

技术标签:

【中文标题】代码中的假平移手势【英文标题】:Fake Pan Gesture in Code 【发布时间】:2014-04-04 03:44:31 【问题描述】:

我正在尝试伪造平移手势,但不知道该怎么做。有一些复杂的代码决定了平移手势会发生什么,所以在进入并抽象出所有逻辑之前,我想知道是否有人知道伪造手势的方法。谢谢。

【问题讨论】:

“假平移手势”是什么意思?您的意思是在用户不拖动手指的情况下将视图向左移动吗? 为什么不用简单的动画来移动视图? 这比移动视图要复杂得多。我很抱歉在里面写了那一点。 然后尝试添加细节你想达到什么效果,你已经做了什么。 【参考方案1】:

不幸的是,API 不提供以编程方式触发手势的方法,也不提供对 UIGestureRecognizer 的目标和选择器的公共访问。

但是,如果您想为单元测试执行此操作,则可以通过执行以下操作来访问目标和选择器:

NSArray *targets = [panGesture valueForKey:@"_targets"];
NSArray *actions = [panGesture valueForKey:@"_actions"];

然后您可以遍历这些数组并调用目标上的操作:

[target performSelector:selector withObject:panGesture];

【讨论】:

【参考方案2】:

要“伪造平移手势”,我假设您的意思是将视图移动到当前没有的位置。 UIView 动画可以用于此。

[UIView beginAnimations:@"Fake-A-Pan" context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationDuration:0.5f];
self.frame = CGRectMake(/* new coordinates for frame here */);
[UIView commitAnimations];  

通过使用动画来改变视图的位置,您基本上可以“伪造一个平底锅”。 编辑作为评论建议,也可以使用基于块的动画。

[UIView animateWithDuration:.5f 
                      delay:0.0 
                    options:UIViewAnimationOptionCurveEaseInOut 
                 animations:^ 
                     self.frame ... // adjust your view here 
                  
                 completion:^(BOOL finished) 
                     NSLog(@"Done animating");
                 ];

【讨论】:

我使用它来向后兼容部署目标 6.0 和 Xcode 6.3.1。我像“刷新”一样使用它,因为我有一个带有 UIScrollView 及其背景图像的空白屏幕。

以上是关于代码中的假平移手势的主要内容,如果未能解决你的问题,请参考以下文章

仅在长按识别器触发后执行平移手势识别器

为啥我的 watchkit 应用程序没有在“开始”状态调用我的平移手势识别器处理代码?

平移手势后将视图返回到原始位置,快速

如何使用平移手势

平移手势使视图在拖动时从手指跳开

Swift:当定时器触发时,如何阻止平移手势取消?