gpt4 book ai didi

iphone - 保持UISegmentedControl(以及其他)的响应

转载 作者:行者123 更新时间:2023-12-03 13:22:32 25 4
gpt4 key购买 nike

我有一个分段控件用作切换。切换后,我会在表格 View 中切换一堆内容,这会花费很少但很明显的时间(在表格 View 中插入/删除部分,为更改添加动画效果等)。我希望分段控件立即响应选择。因此,在针对分段控件的UIControlEventValueChanged事件的操作处理代码中,我执行以下操作:

- (IBAction)groupingChanged:(id)sender {
UISegmentedControl *seg = sender;
[tableModel toggleOn:[seg selectedSegmentIndex] == ToggleOnIndex];
[self performSelectorOnMainThread:@selector(updateGrouping)
withObject:nil
waitUntilDone:NO];
}

其中 updateGrouping是:
- (void)updateGrouping {
MXAssertMainThread();

[tableView beginUpdates];
... several table updates
[tableView endUpdates];
}

设置 waitUntilDone:NO可以使 groupingChanged方法在调用 updateGrouping之前完成,但这似乎不足以重新绘制 View 。分段控件一直保持到表完成更新,然后才进行切换。

因此,我尝试修改 groupingChanged:来为更新创建线程,如下所示:
- (void)delayed {
[self performSelectorOnMainThread:@selector(updateGrouping)
withObject:nil
waitUntilDone:NO];
}

- (IBAction)groupingChanged:(id)sender {
UISegmentedControl *seg = sender;
[tableModel toggleOn:[seg selectedSegmentIndex] == ToggleOnIndex];
[self performSelectorInBackground:@selector(delayed) withObject:nil];
}

这确实有效。分段控件立即切换,表格很快出现。但是我对结果完全没有信心。它只是在新线程启动时给主线程一个暂停的副作用吗?这就是我需要排队对UI进行更新的方式吗?显然是hacky。我希望有人针对这种情况采取更好的模式。

最佳答案

如果您只是想确保分段控件能真正快速地重新绘制,我可能不会深入讨论线程。

取而代之的是,我只是将计时器设置为一个较低的值,例如0.1,这应该足以使控件更新,而不会给用户带来任何明显的延迟。

当我有很多工作要做但需要快速更新UI时,就使用了此功能。

还是有点“hacky”,但是没有引入线程。

所以...

- (IBAction)groupingChanged:(id)sender {
UISegmentedControl *seg = sender;
[tableModel toggleOn:[seg selectedSegmentIndex] == ToggleOnIndex];
[NSTimer scheduledTimerWithTimeInterval:0.1
target:self
selector:@selector(updateGrouping)
userInfo:nil
repeats:NO];

}

关于iphone - 保持UISegmentedControl(以及其他)的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1198121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com