在Mac OS X Lion中,将CARemoteLayerServer和CARemoteLayerClient添加到QuartzCore中。我一直在试图调查他们是否适合在多个进程之间分割图形应用程序,但没有成功。在进程之间是否可以使用CARemoteLayerServer和CARemoteLayerClient?
我可以一个单一的过程中成功地使用它们,沿着这行的一些代码:
- (void)buildLayerSingleProcess
{
CARemoteLayerServer *server = [CARemoteLayerServer sharedServer];
self.client = [[CARemoteLayerClient alloc] initWithServerPort: server.serverPort];
uint32_t clientID = self.client.clientId;
CALayer *layer1 = [CALayer layer];
layer1.bounds = CGRectMake(0.0, 0.0, 100.0, 100.0);
CGColorRef color = CGColorCreateGenericRGB(0.4, 0.2, 0.3, 1.0);
[layer1 setBackgroundColor: color];
CFRelease(color);
[layer1 setOpacity: 0.75];
[layer1 setBorderWidth: 5.0f];
layer1.position = CGPointMake([[self.window contentView] frame].size.width/2.0, [[self.window contentView] frame ].size.height/2.0);
self.client.layer = layer2;
CALayer *servedLayer = [CALayer layerWithRemoteClientId: self.client.clientId];
[[[self.window contentView] layer] addSublayer: servedLayer];
}
这是很好的,但我想尝试做进程之间类似的东西。 server.serverPort是mach_port_t类型的事实意味着它适合在进程之间使用。但是,当我将代码拆分为在两个进程(两个单独的应用程序,或者主进程和XPC服务)中运行时,当我尝试用另一个进程中的服务器的mach_port_t初始化CARemoteLayerClient时我得到:
unable to register with server: 0x10000003
这可能是他们不适合随机过程之间,但使用mach_port_t还挺暗示。
任何人都有使用过程之间的这些类的任何成功?
非常感谢,特别是对工作演示,完全真棒。我正在做一个关于mach端口像socket端口一样工作的错误假设(你可以通过它)。很显然,我需要花更多的时间与内部书! – Michael 2012-02-20 09:05:30
只是太累了,演示不再起作用 - Xcode的7.2 - OSX 10.11.2 – Jimmy 2016-01-19 10:48:08
修复此处描述 - https://github.com/krevis/RemoteLayerDemo/issues/2 – Jimmy 2016-01-19 18:32:42