菜鸟教程小白 发表于 2022-12-13 09:20:08

ios - 让线程进入休眠状态,但让动画继续播放 - 这可能吗?


                                            <p><p>这可能是一个奇怪的问题,但对于我想要实现的目标可能会有不同的解决方案,我愿意接受任何需要的东西!</p>

<p>事实:</p>

<p>我有一个 <code>UITableView</code> 和一个由 <code>UISearchDisplayController</code> 处理的 <code>UISearchBar</code>。</p>

<p>上面说TableView 我有一些按钮和一个小的<code>UIScrollView</code>。 </p>

<p>当用户点击 SearchBar 并且键盘出现时,在键入时显示搜索结果的空间非常小。 </p>

<p>因此,当用户开始搜索时,我想将 TableView 一直移动到顶部(覆盖按钮和 ScrollView)。</p>

<p>我的代码和问题:</p>

<pre><code>- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller {
...

;
;
;
;

...
return;
</code></pre>

<p>}</p>

<p>现在的问题是,由于我的 <code>UITableView</code> 必须移动的距离约为 100 点,SearchDisplayController 将黑色覆盖层放在 TableView 顶部会更快,因此黑色覆盖层已经打开顶部,而 TableView 仍在向上滑动。</p>

<p>结果是一个看起来有点像这样的屏幕:</p>

<p> <a href="http://img833.imageshack.us/img833/9186/problemqdu.png" rel="noreferrer noopener nofollow">problem http://img833.imageshack.us/img833/9186/problemqdu.png</a> </p>

<p>所以用户看到 TableView 向上滑动(这很好),但黑色覆盖层已经在那里等待,因为 searchDisplayController 的动画比我的快。</p>

<p>所以我有一个可能的想法,但不知道该怎么做:</p>

<p>有没有办法设置 searchDisplayController 的动画持续时间,将黑色覆盖层放在搜索 tableView 的顶部?</p>

<p>编辑:</p>

<p>我知道我可以将 animationDuration 设置为 0.01 甚至 0,但是 0.6 的速度对于 100 点的距离来说似乎还不错,所以我正在尝试寻找一种不同的解决方案来降低持续时间。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>诀窍是在动画完成之前不要让运行循环正常运行。当运行循环在特定模式下运行时会执行动画。幸运的是,叠加动画在不同的运行循环模式下执行,而不是在默认运行循环模式下运行的其他动画。所以,你所要做的就是在你的方法中运行 run loop,直到动画完成。</p>

<pre><code>- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller {
    BOOL done = NO;
    // Pass the done variable&#39;s address as the context so we can be notified
    ;
    ;
    ;
    ;
    // Expend the table view to fill its superview
    self.attractionsTableView.frame = [ bounds];
    ;
    NSRunLoop *runLoop = ;
    // Run the run loop until the animation completes
    while(!done) {
      NSAutoreleasePool *pool = [ init];
      if(!])
            break;
      ;
    }
}

- (void)animationDone:(NSString *)name finished:(NSNumber *)finished context:(void *)context {
    // Set the done flag to YES
    *((BOOL*)context) = YES;
    // and kill the run loop
    CFRunLoopStop(CFRunLoopGetCurrent());
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 让线程进入休眠状态,但让动画继续播放 - 这可能吗?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/7590194/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/7590194/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 让线程进入休眠状态,但让动画继续播放 - 这可能吗?