我正在使用EventTap,我需要在代码中设置CGEvent的压力(我正在制作压力平均应用程序)。
目前我没有看到任何其他方式,只能将我的CGEvent转换为NSEvent来改变压力。现在的问题是偶尔我会得到“解除分配的实例错误”并且我的应用程序崩溃了。我正在使用ARC。我使用Zombie Instrument来追踪问题。这是仪器的屏幕截图。显然,某处CGEvent或NSEvent正在获取发布消息,但它已经发布。我不知道我怎么能更好地控制这个释放过程...... :(。
这是我在handleCGEvent方法中使用的代码
CGEventRef handleCGEvent(CGEventTapProxy proxy, CGEventType type, CGEventRef eventRef, void *refcon)
{
if(type == kCGEventLeftMouseDragged)
{
NSEvent *wacomEvent = [NSEvent eventWithCGEvent:eventRef];
if (wacomEvent != nil && wacomEvent.subtype == NSTabletPointEventSubtype)
{
[pressureBuffer replaceObjectAtIndex:pressureBufferIndex withObject:[NSNumber numberWithFloat: wacomEvent.pressure]];
pressureBufferIndex++;
pressureBufferIndex %= pressureBufferSize;
if (pressureBufferFilledCount < pressureBufferSize)
pressureBufferFilledCount++;
float sum = 0;
for (NSUInteger i = 0; i < pressureBufferFilledCount; i++)
{
sum += [[pressureBuffer objectAtIndex:i] floatValue];
}
averagePressure = sum / pressureBufferFilledCount;
NSEvent *newPressureEvent = [NSEvent mouseEventWithType:wacomEvent.type
location:wacomEvent.locationInWindow
modifierFlags:wacomEvent.modifierFlags
timestamp:wacomEvent.timestamp
windowNumber:wacomEvent.windowNumber
context:wacomEvent.context
eventNumber:wacomEvent.eventNumber
clickCount:wacomEvent.clickCount
pressure:averagePressure]; //averagePressure
return [newPressureEvent CGEvent];
}
}
return eventRef;
}
...
谢谢,任何帮助都非常感谢!!!!