代码中的假平移手势
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 及其背景图像的空白屏幕。以上是关于代码中的假平移手势的主要内容,如果未能解决你的问题,请参考以下文章