Objective c 核心动画备份视图意外地覆盖了其他视图
我有一个Mac应用程序,它有一个窗口,我在窗口中添加了一个自定义视图。我通过xcode拖放在自定义视图中添加了三个按钮。然后,我打开了使用核心动画进行背景视图的功能。为了响应视图外部的“测试”按钮触摸,我添加了代码,以编程方式将主CALayer的默认颜色设置为某种颜色,然后添加了一些颜色为矩形的子视图(作为测试)。这一切都很好 我的问题是,与我的预期相反,最后一个彩色矩形部分覆盖了我最初放入自定义视图中的一个按钮的一部分。由于这是与背景视图关联的层上的一个子层,因此我假设它永远不会阻止按钮,无论其中包含什么。我调用了subviews方法来查看按钮是否确实是主自定义视图的子视图,并且所有按钮都列在生成的NSArray中 我需要做什么才能使按钮重新回到顶部?我可以访问NSButton和NSButtonCell对象 以下是按下“测试”按钮时触发的方法:Objective c 核心动画备份视图意外地覆盖了其他视图,objective-c,macos,core-animation,Objective C,Macos,Core Animation,我有一个Mac应用程序,它有一个窗口,我在窗口中添加了一个自定义视图。我通过xcode拖放在自定义视图中添加了三个按钮。然后,我打开了使用核心动画进行背景视图的功能。为了响应视图外部的“测试”按钮触摸,我添加了代码,以编程方式将主CALayer的默认颜色设置为某种颜色,然后添加了一些颜色为矩形的子视图(作为测试)。这一切都很好 我的问题是,与我的预期相反,最后一个彩色矩形部分覆盖了我最初放入自定义视图中的一个按钮的一部分。由于这是与背景视图关联的层上的一个子层,因此我假设它永远不会阻止按钮,无论
(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];
}
添加了一个分配localsub01CALayer.anchorpointZ=0.5(负数朝向查看器,正数远离查看器,零位于显示平面上),这就解决了这个问题