我有一个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];
}
答案 0 :(得分:0)
添加了一个赋值localsub01CALayer.anchorpointZ = 0.5(负数朝向观众,正数远离观众,零在显示平面上),并负责处理。