0

我有一个 Mac 应用程序,它有一个窗口,我在窗口中添加了一个自定义视图。我通过 xcode drop/drag 在自定义视图中添加了三个按钮。然后我打开了使用 Core Animation 做背景视图的能力。我添加了代码,以响应视图外部的“测试”按钮触摸,以编程方式将主 CALayer 的默认颜色设置为某种颜色,然后添加一些颜色为矩形的子视图(作为测试)。这一切都很好。

我的问题是,与我的预期相反,最后一个彩色矩形部分覆盖了我最初放入自定义视图中的一个按钮的一部分。由于这是与背景视图关联的图层上的子图层,因此我假设它永远不会阻塞按钮,无论那里有什么。我调用了 subviews 方法来查看按钮是否确实是主自定义视图的子视图,并且所有按钮都列在生成的 NSArray 中。

我需要做什么才能使按钮重新回到顶部?我可以访问 NSButton 和 NSButtonCell 对象。

这是按下“测试”按钮时触发的方法:

(IBAction)PushButtonTest:(id)sender {

NSRect localNSRectWorkArea;
NSRect localNSRectButton01;
NSRect localNSRectButton02;
NSRect localNSRectButton03;
NSArray *subviewarray;

CALayer *localCALayer;
CALayer *localsub01CALayer;

localNSRectWorkArea = [WorkAreaView bounds];

localNSRectButton01 = [Button01 frame];
localNSRectButton02 = [Button02 frame];
localNSRectButton03 = [Button03 frame];

localCALayer = [WorkAreaView layer];
CGColorRef color = CGColorCreateGenericRGB( 0.2, 0.5, 0.5, 1.0 );
localCALayer.backgroundColor = color;
localCALayer.opacity = 1.0;

localsub01CALayer = [[CALayer alloc] init];
localsub01CALayer.opacity = 0.5;
CGColorRef color1 = CGColorCreateGenericRGB( 0.5, 0.2, 0.2, 1.0 );
localsub01CALayer.backgroundColor = color1;
float x1 = (localNSRectButton02.origin.x - localNSRectButton01.origin.x);
float y1 = (localNSRectButton02.origin.y - localNSRectButton01.origin.y);
localsub01CALayer.bounds = CGRectMake(0, 0, x1, y1);
float x3 = ((localNSRectButton02.origin.x + localNSRectButton01.origin.x)/2.0) + (localNSRectButton01.size.width/2.0);
float y3 = ((localNSRectButton02.origin.y + localNSRectButton01.origin.y)/2.0) + (localNSRectButton01.size.height/2.0);
localsub01CALayer.position = CGPointMake(x3, y3);

[localCALayer addSublayer:localsub01CALayer];

subviewarray = [WorkAreaView subviews];

[localCALayer displayIfNeeded];

 }
4

1 回答 1

0

添加了一个赋值 localsub01CALayer.anchorpointZ = 0.5 (负数朝向观察者,正数远离观察者,零在显示平面上)并且处理了它。

于 2013-06-15T04:00:12.793 回答