摇动手势并为 seuge 做准备 - 开始/结束外观转换的不平衡呼叫
Posted
技术标签:
【中文标题】摇动手势并为 seuge 做准备 - 开始/结束外观转换的不平衡呼叫【英文标题】:Shake gesture and prepare for seuge - Unbalanced calls to begin/end appearance transitions 【发布时间】:2014-04-06 18:15:01 【问题描述】:我有一个UITabelViewController
(mainViewCtrl),如果用户选择一个单元格,一个新的UIViewController
(detailViewCtrl) 将被推入“场景”,其中包含有关所选单元格的一些详细数据。 - 很简单的东西。
如果用户摇动手机,(detailViewCtrl) 会显示一些随机的细节数据。
这是我的prepareForSeque
代码:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
if ([segue.identifier isEqualToString:@"DetailViewSeque"])
int i;
if ([sender isKindOfClass:[UITableViewCell class]])
UITableViewCell *cell = (UITableViewCell*)sender;
NSIndexPath *indexPath = [self.minifigsTableView indexPathForCell:cell];
i = indexPath.row;
else
i = arc4random() % [self.collectionOfData count];
DeatilViewController *dest = [segue destinationViewController];
dest.data = [self.collectionOfData objectAtIndex:i];
代码很简单,没什么花哨的。我的问题是,如果用户在两个 ViewController(mainViewCtrl 和 detailViewCtrl)之间的转换正在进行时摇动手机,我会得到这个错误:
开始/结束外观转换的不平衡调用。
我理解这会导致问题的原因。
但是我该如何解决呢?如何在转换处于活动状态时以某种方式阻止 UIGestureEvent 被触发?
【问题讨论】:
停止添加 Xcode 标签。它不适用于您的问题。 对不起...但是为什么要评论呢? 因为我删除了一次然后你又把它放回去了。自从我再次删除它以来,我想指出为什么我们不会一直来回走动。 :) 【参考方案1】:这就是我解决问题的方法。
首先我添加了:@property BOOL isInTransit;
然后我将viewDidAppear
方法添加到我的代码中,并将isIntransit
设置为true
(转换结束后将调用viewDidAppear。)
-(void)viewDidAppear:(BOOL)animated
self.isInTransit = true;
最后,我在 motionBegan
方法中添加了一条 if 语句,并在调用 preformeSegueWithIdentifier
之前将 isInTransit 设置为 false:
- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event
if (event.subtype == UIEventSubtypeMotionShake)
if (self.isInTransit)
self.isInTransit = false;
[self performSegueWithIdentifier:@"DetailViewSeque" sender:self];
感谢 Armand DOM 帮助我。
【讨论】:
【参考方案2】:也许您可以添加boolean property "isInTransit"
。
在您的viewWillAppear
中将其设置为false
,
在您的prepareForSegue
中将其设置为true
(直到您的int i;
)。
在你的motionEnded
(摇晃方法)测试中if (isInTransit=true)
-> 不要处理摇晃,所以不要触发segue。
这会有所帮助
【讨论】:
感谢您帮助我。以上是关于摇动手势并为 seuge 做准备 - 开始/结束外观转换的不平衡呼叫的主要内容,如果未能解决你的问题,请参考以下文章
Google AdMob 干扰 SwiftUI 中的摇动手势
更改 SpriteKit 中摇动手势的灵敏度:目标是创建更快的摇动?