在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