问题标签 [swizzling]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
objective-c - iOS 模糊文本:一劳永逸地检测和解决它?
我不止一次遇到 UIView(子类)以小数偏移结束的情况,例如因为它的尺寸是奇数并且居中,或者因为它的位置基于奇数大小的容器的中心。
这会导致文本(或图像)模糊,因为 iOS 会尝试在半像素偏移上渲染视图(和子视图)。我觉得要求CGRectIntegral()
每次换帧都不是一个完美的解决方案。
我正在寻找轻松检测这些情况的最佳方法。在写这个问题时,我想出了一个相当激进的方法,它在我当前的项目中显示出比我想象的更多的偏差。
所以这是为了分享。非常欢迎对更好或更不激进的替代方案提出评论和建议。
主文件
UIViewOverride.m
这是作为 UIView 子类实现的,可以避免强制转换和/或编译器警告。
有问题的视图将生成日志消息并显示为红色或绿色透明。
-DDEBUGVIEW
在调试模式下设置为编译器标志。
objective-c - Method Swizzling - 如何确保方法在被调用之前被 swizzled
我正在使用 SIMBL 调配第三方应用程序创建 NSMenuItems 的方法,但是在初始化我的方法调配之前创建菜单项的时间有 50/50。
什么是确保我的调酒总是第一位的干净方法?我想我可以调配 applicationDidFinishLaunching: 并继续我的调配。但我担心我会在那里遇到同样的错误,在我的实际调酒到位之前将调用 applicationDidFinishLaunching。
约翰
ios - Objective-C 中方法混用的危险是什么?
我听说人们说方法混合是一种危险的做法。甚至名称 swizzling 也暗示它有点作弊。
Method Swizzling正在修改映射,以便调用选择器 A 将实际调用实现 B。它的一种用途是扩展封闭源类的行为。
我们能否将风险形式化,以便决定是否使用 swizzling 的任何人都可以做出明智的决定,是否值得他们尝试做的事情。
例如
- 命名冲突:如果该类后来扩展其功能以包含您添加的方法名称,则会导致大量问题。通过合理命名混合方法来降低风险。
objective-c - 如何实现方法调配?
我正在尝试使用 SIMBL 修改程序的行为(我没有它的源代码)。我使用了类转储,发现我需要覆盖一个实例方法
此方法在称为控制器的类中。我需要做的就是获取参数 arg1 就可以了。也许 NSLog 它或发布通知...我阅读了有关在 Objective-C 中调配的方法,但我该如何使用它?我需要参考我没有课程的 MessageController 类。
谢谢!
iphone - iPhone:我想出了一个有趣的方法来绕过 API 限制。这行得通吗?
我试图解决的问题是:
使用 UIImagePicker 时,它会在设备旋转时自行调整。我不希望它这样做,而是应该始终保持纵向。我用谷歌搜索了很多,但没有找到任何解决方案(只是其他人有同样的未解决问题)。唯一的答案是使用私有 API 调用,我宁愿不冒险这样做。
-
然而,我遇到了' method swizzling '——一种在运行时交换方法名称的方法。我打算做什么:
向 UIViewController 添加一个类别,该类别定义了一个方法,例如“customShouldRotate”,定义了不允许旋转的自定义行为。
在运行时将这些方法与 UIViewController 的默认旋转方法混合。
-
不过想了想,可能没那么简单。这就是为什么 - 任何对以下内容的回答将不胜感激。
我正在调整的方法是在 UIViewController,而不是 UIImagePickerController。我不能直接在图像选择器中进行调整,我已经尝试过通过子类化,它似乎是处理旋转的子视图控制器,而不是 UIImagePickerController 本身。混合的方法是否会传递给子类,如果没有,那么是否有解决方法来做到这一点?
它可能不是 UIImagePickerController 中使用的 UIViewController 的正常旋转方法。有没有办法告诉?
Apple 会接受方法调配吗?我没有使用私有 API 调用,但是如果他们无论如何都拒绝它,我也不会过于惊讶。
-
这整个想法是否可行/值得尝试 - 或者,如果有人实际上以不同的方式解决了原始问题,那会更好。
iphone - 自定义导航栏隐藏按钮
希望您也能对此有所帮助...我想通过添加自定义背景图片来自定义导航栏。我发现了一个完美但有点复杂的方法,叫做:NavigationSwizzle。在以前的项目中,我没有任何严重的问题,但现在我被困住了......
从我的 AppDelegate 我调用这个静态方法:
}
在通过将第二个视图控制器推到堆栈上调用第二个视图控制器之后,在 rootNavigationController 中,我的右键、self.title、activityIndicator 不显示。如果我在[navBar insertSubview:imageView atIndex:0]行中评论或设置atIndex:-1 ; 然后按钮显示,但我的自定义背景消失了,我得到了常规的 iPhone 导航选项卡。
在rootNavigationController的didSelectRowAtIndex中,我有:
先感谢您...
如果您需要更多代码或解释,请随时问我...
最好的问候,卢卡
编辑:
好的,我可以让这个问题更简单。我的导航栏中有一个自定义背景图像。这张图显然覆盖了我的
如果我将 alpha 设置为:背景中 imageView 的 0.3,我可以看到我的标题:
所以问题是如何将我的 navigationItem.title 发送到前面?它是 UIView 类的后代吗?
编辑 2: 真正奇怪的是,在 rootController 中标题是可见的(在背景图像上方),但是在推动另一个 viewController 标题之后,背景 imageView ?!
objective-c - Swizzling initWithFrame:不适用于 NIB 中的对象
我在 MKMapView 和 UIScrollView 上调配 initWithFrame: 和 dealloc 以添加和删除通知侦听器以监视与外部设备的连接,这样我就可以为这些视图连接额外的手势识别器,如下所示:
这对于我在代码中创建的视图非常有用,但是如果我在 XIB 中声明它们,我的方法就不会被调用。我使用 swizzling 而不是继承,因为我不想硬编码这种支持——我希望能够在每个目标的基础上添加它。
我可以做些什么来挂钩这些对象,以便我可以为这些类型的所有对象添加我的手势识别器,无论我是通过编程方式还是在 NIB 中创建它们?
objective-c - 如何调用我使用 Objective-C 中的 class_getInstanceMethod 保存的方法?
如何调用我之前使用以下代码保存的方法:
正如您可能想象的那样,调用[SomeClass someMethod]
不会起作用,因为后来我混合了原始方法。
objective-c - NSArray 的方法调配
我正在尝试在 NSArray 上调试某些东西,但我什至找不到导致问题的数组指针是什么,我不知道为什么会这样。我在 objectAtIndex: (out of bounds) 上遇到错误,它似乎来自一些内部 NSView 方法......无论如何,我尝试使用自己的方法调整 objectAtIndex: ,但它不起作用。奇怪的是我可以用另一个类和方法做同样的事情,而且效果很好。这是我正在做的调酒:
它不工作。有谁知道为什么?
更新:谢谢戴夫,这可能是问题所在。我也有 getClassMethod 而不是实例。无论如何,这就是我最终做的事情:
glsl - 什么是 OpenGL ES 2.0 中的 swizzling?(特别是 PowerVR SGX。)
PowerVR 说
Swizzling lowp 向量的组件是昂贵的,应该避免。
究竟什么是调酒?
但是vec3(color.b, color.r, color.g)
,或者vec3(color)
,当颜色是 vec4 时呢?
访问或修改单个组件是否构成混搭?我真的不这么认为,但如果不是,那么您可以通过手动执行更多的分配操作来解决 swizzling。我这样做没有问题,但对我来说这似乎很神奇,如果你可以通过编写没有 swizzle 符号的代码以更快的速度获得相同的效果。