UIMenuController 响应很慢

Posted

技术标签:

【中文标题】UIMenuController 响应很慢【英文标题】:UIMenuController respond very slowly 【发布时间】:2012-04-24 07:53:16 【问题描述】:

我正在开发 epub 阅读器,只是我构建了阅读器结构以获取 html 文件的路径,将其加载到 UIWebView 上,然后我对章节进行分页并查看它......正如你在选择文本时所知道的在 webView 中,menuController 将出现,我有多个功能,例如添加注释、突出显示文本、共享 ..等。每件事都很好,但我有一个特殊情况,有些书包含大章节(html 文件大小约为 180kb,而普通文件通常约为 30-50kb),在这些章节中,当我选择文本时UIMenuController花太多时间出现!最后它出现并且运行良好,但它让用户等待这么长的时间(我们在这里谈论大约 7 秒!!).. 我的构建目标是 ios 4 和 5,这发生在模拟器中和设备..谁能提供帮助?

编辑:

canPerformAction 在我的 ViewController 中:

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender

    BOOL can = [super canPerformAction:action withSender:sender];

    if(action == @selector(copyPressed::) || 
       action == @selector(addNotePressed:) || 
       action == @selector(sharePressed:) || 
       action == @selector(highlightPressed:))
    
        can = YES;
    

    if (action == @selector(copy:) || action == @selector(_define:) || action == @selector(selectAll:) || action == @selector(select:)) 
    
        can =  NO;
    

    return can;

【问题讨论】:

这很可能是由“canPerformAction”函数引起的。你的是什么样子的? 好吧,它不存在...我的下一个猜测是您正在将所有 html 加载到一个长流中,并且菜单控制器必须认真考虑将弹出框放在哪里。您可以使用 Instruments 的 Time Profiler 功能来确认哪个功能需要很长时间。在你这样做之后,你会更好地了解什么需要这么长时间。在那之前,很难说是什么原因造成的。 您使用 Time Profiler 找出哪个函数花费了很长时间吗? 是的,它是 canPerformAction ,它的代码在我的编辑中。 【参考方案1】:

我正在开发一个相同的项目,并且刚刚使用 UIMenuController 实现了相同的功能。我没有注意到显示带有大章节的菜单的任何延迟。您能否描述一下您在 UIWebView 中处理触摸事件的方式以及任何其他手势等。此外,当章节加载时是否正在运行 javascript

【讨论】:

好吧..在这里描述它真的很复杂,但我尝试用简单的方式描述它..我通过我的 webView 类的 hitTest 方法接收到触摸..我知道子类是错误的webView,但除了 hitTest 方法,这个类里面什么都没有。我这样做是因为在某些情况下我需要确切地知道接触点在哪里,比如如果他按下突出显示的文本,我会从 javaScript 收到他的 url按下突出显示,如果他想删除或共享此文本,我会显示弹出菜单,在这些情况下我完全没有延迟......这只是正常的选择 关于我所描述的重要章节。 我也是 UIWebView 的子类,但在子类中实现 canPerformAction,然后扩展 UIWebView 委托以将菜单选择传递给拥有视图的 UIViewController。作为健全性检查,确实更改了“动画” UIMenuController setMenuVisible 中的选项会影响性能吗?你是如何构建和显示菜单的?我自己预先构建了所有菜单选项,然后使用我自己的菜单状态选择在 canPerformAction 中显示的内容。 所以您将菜单操作从 webView 子类转发到 viewController ?实际上我构建了它并在 viewController 中执行了操作.. 如果我按照您的方式进行操作,我可以获得更好的性能吗? 你能告诉我你的自定义 webView 类吗?我认为检查您的实施会有所帮助.. 赏金将很快到期,如果我的表现有任何变化,我会将其奖励给您。

以上是关于UIMenuController 响应很慢的主要内容,如果未能解决你的问题,请参考以下文章

UIMenuController 没有响应第一个选择,只有第二个

UITableViewCell 不会成为第一响应者(在单元格手势上显示 UIMenuController)

在 UIView 上设置 UIMenuController

UIMenuController

WKWebView 和 UIMenuController

摆脱 UIMenuController 中的标准项目