- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何禁用在 Mac OS X Lion 中使用箭头键在 WebView 中导航时出现的动画?
我尝试更改的行为似乎是 Mac OS X Lion 上 WebView 的默认行为。如果将文档加载到 WebView 中,设置插入点,然后使用向上箭头和向下箭头键进行导航,则滚动不是瞬时的 - 存在动画( View 明显向上或向下滚动)。
这是一个 Xcode 项目,您可以使用它来查看此行为(只需运行应用程序,在文档中设置插入点,然后使用向上箭头和向下箭头键进行导航,以便 View 滚动): http://dl.dropbox.com/u/78928597/WebViewTest.zip
我想要实现的行为就是 Safari 中发生的情况。如果您在 Safari 中打开 contenteditable
属性设置为 true
的 html 文档,则可以在文档内设置插入点,然后使用向上箭头和向下箭头进行导航方向键。当您以这种方式导航时,滚动不会有动画效果。 View 立即滚动。
这是一个 html 文档,您可以使用它来查看此行为: http://dl.dropbox.com/u/78928597/WebViewTest.html
由于 Safari 使用 WebView,并且它会即时滚动,因此似乎应该有一种方法可以更改任何 WebView 的滚动行为,但我没有找到它。
请注意,您需要在使用箭头键导航之前设置插入点,否则您会看到不同的行为。
最佳答案
我认为有一种方法可以做到这一点,但它需要使用 Objective-C 运行时来修改私有(private)类的私有(private)方法。
要使用 Objective-C 运行时,请添加
#import <objc/runtime.h>
到 Xcode 项目中 AppDelegate.m 顶部的 #import
指令。
滚动动画似乎发生在私有(private)方法中
- (BOOL)_scrollTo:(const CGPoint *)pointRef animate:(NSInteger)animationSpecifier flashScrollerKnobs:(NSUInteger)knobFlashSpecifier
NSClipView
。
我们无法通过子类化来修改由 WebView
管理的 NSClipView
对象(实际上是私有(private)类 WebClipView
的实例)。相反,我们可以使用一种称为“方法调配”的技术。
在 AppDelegate
类的 @implementation
中,添加
static BOOL (*kOriginalScrollTo)(id, SEL, const CGPoint *, NSInteger, NSUInteger);
static BOOL scrollTo_override(id self, SEL _cmd, const CGPoint *pointRef, NSInteger animationSpecifier, NSUInteger knobFlashSpecifier)
{
return kOriginalScrollTo(self, _cmd, pointRef, 2, knobFlashSpecifier);
}
+ (void)load
{
SEL selector = @selector(_scrollTo:animateScroll:flashScrollerKnobs:);
id WebClipViewClass = objc_getClass("WebClipView");
Method originalMethod = class_getInstanceMethod(WebClipViewClass, selector);
kOriginalScrollTo = (void *)method_getImplementation(originalMethod);
if(!class_addMethod(WebClipViewClass, selector, (IMP)scrollTo_override, method_getTypeEncoding(originalMethod))) {
method_setImplementation(originalMethod, (IMP)scrollTo_override);
}
}
您可以在 Mike Ash 的文章 “Method Replacement for Fun and Profit” 中了解有关此处发生的情况的更多信息。 ;我正在使用“直接覆盖”方法调配。
由于此代码,将调用 scrollTo_override()
而不是 WebClipView
方法 -[_scrollTo:animateScroll:flashScrollerKnobs:]
。 scrollTo_override()
所做的只是调用原始 -[_scrollTo:animateScroll:flashScrollerKnobs:]
,其中 2 作为 animationSpecifier
。这似乎可以防止滚动动画发生。
关于cocoa - 在 Mac OS X Lion 的 WebView 中禁用滚动动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10558942/
去年我花了整整两天时间试图让 python-mysql 工作在我干净安装的 Lion 上,最后绝望地放弃了。升级到山狮后,我想我会再试一次,但没有成功。可能是我对 Lion 的所有尝试都搞砸了我的设置
我正在尝试让 WordPress 3.3.1 多站点(子域)在我的本地主机中工作。但是,我似乎需要为我的 Wordpress 虚拟主机配置通配符子域。我们的想法是让 any_subdomain.my_
我想在 osx lion 上安装 pyaudio,但我无法做到。每次我尝试使用 pkg 时,它都不会安装任何东西。当我尝试使用 pip 安装它时,出现以下错误(以及许多其他行): lipo: can'
我正在尝试让我在 Mountain Lion 上使用 Xcode 4.4 构建的 OS X 应用程序也能在 Lion 上运行。 将 OS X 部署目标设置为 10.7 没有帮助。该应用程序仍然无法在
我一直想用 Opa 弄脏我的手,但真的感觉缺少 REPL,这是我适应新语言的首选武器。瞧,Opa 博客提到了一个名为 opatop 的工具。看起来就是这样,但它似乎没有包含在标准的 Mac 或 Ubu
在 Lion 中打开窗口时,我遇到以下 EXC_BAD_INSTRUCTION 异常,但该应用在 Mountain Lion 中似乎工作正常。可能是什么问题? Process: MyA
我正在尝试在我的 mac 上使用本地服务器,但它似乎忽略了/etc/hosts 文件中的 localhost 设置。找到了几个页面,其中解决方案是重新安装,并将 localhost 放在/etc/ho
我最近升级到 Mountain Lion OSX,而我已经在工作的 MySql 停止工作了。当我尝试在终端中运行 MySql 时,我得到的是以下错误? ERROR 2002 (HY000): Ca
我有一个列表,当您将鼠标悬停在每个列表项上时,其中会显示一个按钮。该按钮位于每个列表项的右边缘。当列表不需要滚动时这很好用,但是当需要在带有隐藏滚动条的 Safari 中的 Lion/Mountain
我不太确定是什么原因造成的,但在 OSX 10.7.X 上当前稳定版的 safari 中,我只看到渲染了 3-4 帧。我下载了最新的 Safari 测试版,他们似乎改进了它,但它仍然掉落了大量的帧。
是否有任何工具可以分析 Mac OS X Lion 和 iOS 上的缓存未命中情况。如果您知道如何在乐器中做到这一点,请提供帮助。 Shark(CHUD 包)不安装在 Mac OS X Lion 及更
如果您创建一个普通项目并将其作为您的应用程序委托(delegate)的实现: @interface TESTAppDelegate () @property (nonatomic, strong) N
Network Link Conditioner 首选项面板(从 Apple 开发者网站上的“Hardware IO Tools for Xcode - Late July 2012”DMG 安装)在
我使用“ssh -X machine”连接到远程 Linux 计算机,然后运行图形应用程序,因此它的窗口使用 X Window 显示在我的本地 OS X Lion 计算机上。我收到错误 “Xlib:显
我从官方网站下载了 PostgreSQL 并运行了 .dmg 安装程序。之后我下载了 pgadmin3,我确实能够连接到数据库。 当我运行“psql”时,出现以下错误: psql: could not
我刚刚在我的雪豹安装上下载了 osx lion 更新。 Xcode 4.1 现在不会运行,因为它希望运行 Lion 版本。然而,当我去应用商店安装 Xcode 4.1 lion 时,它告诉我它已经安装
我能做到: sudo nano .bash_profile 但是当我这样做的时候: sudo echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bas
我正在制作一个使用山狮通知中心的应用程序。我包括对雪豹和狮子 growl 的支持。我该怎么做才能使二进制文件能够在两者上运行,而不需要 2 个单独的 .app 包。 最佳答案 我猜您会针对 Growl
我有一个使用 py2app 转换为捆绑应用程序的 python 脚本。手动调用时,它运行良好。但是,在 Mountain Lion 下,当我尝试使用 launchd 调用它时,系统日志中出现以下错误:
我正在迁移到一台新计算机,同时从雪豹迁移到狮子。 phpunit 似乎没有进行迁移,所以我重新安装了它。然而,pear 的标准安装似乎不适用于我的 php 家庭brew 安装。这是错误: phpuni
我是一名优秀的程序员,十分优秀!