2013-06-15 2 views
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]; 

} 

ответ

0

Добавлено задание localsub01CALayer.anchorpointZ = 0,5 (отрицательные числа к зрителю, положительные числа от зрителя , ноль находится на плоскости дисплея), и это позаботилось об этом.

Смежные вопросы