我需要在Mac OS上以编程方式禁用/禁止系统范围的触摸手势.我指的是手势,例如空格之间的四指滑动等.
我看过EventTap,但这似乎不是一个选项(尽管此前有报道 - 也许它在10.8下改变了)
我还尝试了许多以编程方式更改系统首选项的方法.例如,我尝试在使用IORegistryEntryCreateCFProperties找到它的服务上使用IOConnectSetCFProperties.
我还深入研究了触控板首选项面板,看看他们是如何做到这一点的,我试图重现它(忽略任何创建/发布不一致,这只是测试代码):
NSInteger zero = 0;
CFNumberRef numberWith0 = CFNumberCreate(kCFAllocatorDefault, kCFNumberNSIntegerType, &zero);
CFMutableDictionaryRef propertyDict = CFDictionaryCreateMutable(kCFAllocatorDefault, 0,
&kCFTypeDictionaryKeyCallBacks,
&kCFTypeDictionaryValueCallBacks);
CFDictionarySetValue(propertyDict, @"TrackpadFourFingerHorizSwipeGesture", numberWith0);
io_connect_t connect = getEVSHandle(); // Found in the MachineSettings framework
if (!connect)
{
NSLog(@"Unable to get EVS handle");
}
kern_return_t status = IOConnectSetCFProperties(connect, propertyDict);
if (status != KERN_SUCCESS)
{
NSLog(@"Unable to get set IO properties");
}
CFRelease(propertyDict);
CFPreferencesSetValue(CFSTR("com.apple.trackpad.fourFingerHorizSwipeGesture"), _numberWith0, kCFPreferencesAnyApplication, kCFPreferencesCurrentUser, kCFPreferencesCurrentHost);
CFPreferencesSetValue(CFSTR("TrackpadFourFingerHorizSwipeGesture"), _numberWith0, CFSTR("com.apple.driver.AppleBluetoothMultitouch.trackpad"), kCFPreferencesCurrentUser, kCFPreferencesCurrentHost);
CFPreferencesSynchronize(kCFPreferencesAnyApplication, kCFPreferencesCurrentUser, kCFPreferencesCurrentHost);
status = BSKernelPreferenceChanged(CFSTR("com.apple.driver.AppleBluetoothMultitouch.trackpad")); …Run Code Online (Sandbox Code Playgroud) 默认情况下,UISplitViewController提供滑动手势以纵向模式打开主视图.
不幸的是,即使操作详细页面上的滑块,此手势也会打开主控制器!我在这里发现了另一个问题,这个问题被标记为iOS 5.1报告的错误,但问题仍然存在于iOS7上......
现在有办法在这种情况下抑制这种姿势吗?我意识到我可以通过这样做完全删除它:
splitViewController.presentsWithGesture = NO;
Run Code Online (Sandbox Code Playgroud)
然而,允许手势并仍然有可用的滑块将是很好的!
在GeoJson对象上使用$near/ $geoNear/ $geoWithin时MultiPoint,如果任何点在范围内,是否会返回文档,或者它们是否都必须在范围内?
我正在使用antitypical/result包来提供通用的Result类型.该包定义Result如下:
public enum Result<T, Error> {
...
}
Run Code Online (Sandbox Code Playgroud)
现在,我只希望NSError在我的代码中返回类型错误,所以如果我不必继续这样做会很好:
func myFunc() -> Result<String, NSError> { ... }
Run Code Online (Sandbox Code Playgroud)
相反,我想创建一个派生的StdResult类型,以便我可以这样做:
func myFunc() -> StdResult<String> { ... }
Run Code Online (Sandbox Code Playgroud)
我尝试了各种各样的东西,但我找不到解决方案.例如,这不起作用:
typealias StdResult<T> = Result<T, NSError>
Run Code Online (Sandbox Code Playgroud)
有没有可行的解决方案?
我觉得我必须遗漏一些明显的东西.将列表分解为头部和尾部,然后通过尾部递归是一种标准的函数式编程技术,但我正在努力为SliceableSwift中的类型执行此操作.
我有一个遵循这种模式的递归函数:
func recurseArray(arr: [Int]) -> [Int] {
guard let first = arr.first else {
return []
}
let rest = recurseArray(Array(dropFirst(arr)))
let next = rest.first ?? 0
return [first + next] + rest
}
Run Code Online (Sandbox Code Playgroud)
显然,真正的代码比将每个数字添加到下一个数字要多得多.
请注意拨打电话Array(dropFirst(seq)).转换为数组是必需的,因为dropFirst实际返回a ArraySlice,而a ArraySlice不是a Sliceable,因此我无法将其传递给我的函数.
我不确定编译器在这里能做什么样的优化,但在我看来,从SubSlice不必要的方式创建一个新的数组将不是最佳的.这个问题有方法解决吗?
此外,我真正想要做的是创建一个可以采用任何 Sliceable类型的函数版本:
func recurseSeq<T: Sliceable where T.Generator.Element == Int>(list: T) -> [Int] {
guard let first = list.first else {
return []
}
let …Run Code Online (Sandbox Code Playgroud) 无论如何在滚动UITableView时动态更改单元格的高度?
当滚动位置到达某个点时,当用户将其向下拖过顶部时,我需要更改多个单元格的高度.我可以通过发出一个reloadData来成功地做到这一点,但是由于单元格消失所以它非常突然.
我还尝试重新加载单元格并在表视图上运行开始/结束更新,但在这两种情况下,动画都会将滚动视图发送回顶部.
我想设置单元格高度变化的动画,而不会弄乱正在进行的拖动的当前内容偏移.
蒂姆
我在创建位图上下文时遇到此错误:
CGBitmapContextCreate:不支持的参数组合:8个整数位/组件; 24位/像素; 3组分色彩空间; kCGImageAlphaNone; 7936字节/行.
这是代码(请注意,上下文基于现有CGImage的参数:
context = CGBitmapContextCreate(NULL,
(int)pi.bufferSizeRequired.width,
(int)pi.bufferSizeRequired.height,
CGImageGetBitsPerComponent(imageRef),
0,
CGImageGetColorSpace(imageRef),
CGImageGetBitmapInfo(imageRef));
Run Code Online (Sandbox Code Playgroud)
宽度为2626,高度为3981.我将bytesPerRow保留为零,以便自动为我计算,并且它自己选择7936.
那么,地球上的不一致是什么?这让我疯了.
我正在尝试使用设备本身的仪器来分析我的应用程序.具体来说,我正在尝试进行时间分析.
不幸的是,我无法让它发挥作用.情况如下:
1)如果我使用在模拟器上使用开发者配置文件签名的应用程序运行仪器,它可以工作.
2)如果我使用在模拟器上使用分发配置文件签名的应用程序运行仪器,它可以工作.
3)如果我运行使用设备上的分发配置文件签名的应用程序(这是分析的默认情况,因为该方案设置为使用发布版本),Xcode会抱怨没有有效的配置文件.这看似合理.
4)如果我使用设备上的开发者配置文件签署了使用应用程序签名的工具,则Xcode会传输应用程序,但随后会立即声明它已"完成运行".该应用程序未运行,并且在大多数情况下没有错误消息.
有时,有时,组织者会发出一条消息,指出设备无法识别主机 - E800001C.
5)使用开发人员配置文件直接运行应用程序工作正常 - 我可以按预期调试.
总结 - 我无法通过使用调试版本的仪器在设备上运行应用程序 - 它在有机会启动之前停止.没有错误消息 - 在调试控制台中根本没有.
救命?
谢谢,
蒂姆
我正在尝试在(半)透明背景上使用CoreText(appkit版本)进行渲染,因此边缘不平滑.
在网上搜索表明没有解决这个问题的方法,但是我不相信它,因为一个简单的观察:如果我创建一个包含相同字符串的CATextLayer,那么字体是可爱和流畅的.
我已经尝试将各种"允许"设置设置为true,然后完成它们提供的16种可能性.有些人比其他人好,这是我到目前为止所做的:
CGContextSetAllowsAntialiasing(context, YES);
CGContextSetAllowsFontSmoothing(context, YES);
CGContextSetAllowsFontSubpixelPositioning(context, YES);
CGContextSetAllowsFontSubpixelQuantization(context, YES);
CGContextSetShouldAntialias(context, YES);
CGContextSetShouldSmoothFonts(context, NO);
CGContextSetShouldSubpixelPositionFonts(context, YES);
CGContextSetShouldSubpixelQuantizeFonts(context, YES);
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我如何获得CATextLayer获得的相同结果吗?
Apollo 文档讨论了cacheRedirects告诉 Apollo 如何从其他查询访问缓存中的数据的用法。
它给出了一个例子:
在某些情况下,查询请求的数据已存在于客户端存储中的不同键下。一个非常常见的示例是当您的 UI 具有使用相同数据的列表视图和详细信息视图时。列表视图可能会运行以下查询:
查询 ListView { 书籍 { id 标题摘要 } }
选择特定书籍时,详细信息视图使用以下查询显示单个项目:
查询 DetailView { book(id: $id) { id title abstract } }
我们知道数据很可能已经在客户端缓存中,但是因为它是通过不同的查询请求的,Apollo 客户端不知道这一点。为了告诉 Apollo Client 在哪里查找数据,我们可以定义自定义解析器
我试图理解为什么这个例子是必要的。如果books查询返回一个 type 的数组Book,并且book请求返回一个 type 的对象Book,那么标准化缓存肯定已经有基于 typename 和 id 的每本书的数据(来自 ListView 查询),并且DetailView查询可以无需任何进一步干预即可直接使用该信息。相反,我们被告知要编写一些代码来帮助它:
const cache = new InMemoryCache({
cacheRedirects: {
Query: {
book: (_, args, { getCacheKey }) =>
getCacheKey({ __typename: …Run Code Online (Sandbox Code Playgroud)