2011-11-21 12 views
8

Eğlence için osx'te bir büyü stili uygulama yapıyorum ve bir sapmaya rastladım cevabını bulamıyorum.NSView şeffaf bir şekilde nasıl yapılır ve NSWindow altında neler olduğunu gösterir?

NSWindow'un içinde bir NSView var ClearColor ve alfa değerini .25 olarak ayarladım, ancak NSWindow'un NSView arkasında nasıl şeffaf hale getirileceğini anlayamıyorum, böylece seçili olduğunda uygulamaların altındaki öğeleri görebilirsiniz.

Dokümanlar arasında kazmak herhangi bir düşünce için aradığım şeyi bulamıyor gibi görünüyor mu? adlı

özel NSView:

Teşekkür

cevap

20

Belki NSWindow'ssetOpaque: denemek ve aynı zamanda şeffaf bir renk ile pencerenin arka plan rengini ayarlamak gerekir (setBackgroundColor:)

İşte

Sadece bunu kendi hızlı örnektir myView:

-(void)drawRect:(NSRect)dirtyRect 
{ 
    [[NSColor windowBackgroundColor] set]; // Using the default window colour, 
    dirtyRect.size.width /= 2; 
    NSRectFill(dirtyRect);  // Only draw the part you need. 
} 

Sonraki Bir pencerenin içeriğini ayarla myView ance. IB'de yaptım ama bunu setContentView aracılığıyla manuel olarak ayarlayabilirsiniz.

Ve böyle pencereyi yapılandırılmış:

[myWin setOpaque:NO]; //Tells the window manager that the window might have transparent parts. 
[myWin setBackgroundColor:[NSColor colorWithCalibratedWhite:1.0 alpha:0.0]]; //Tells the window to use a transparent colour. 

Ve bu ne alıyorum. Dediğim gibi

Window with partially transparent http://i44.tinypic.com/a41jxi.jpg

Yani, o zaman aslında çizilmiş ihtiyacını yapmak parçaları yeniden çizme, arka plan olarak görünmez bir renk kullanmak için pencereyi anlatmalıyız.

+0

Bunu düşündüm ama tüm NSWindow için ayarlanmış olanlar sadece bir kısmı değil. – acreek

+0

"Tüm NSWindow" ile "titlebar + content" veya tüm içerik alanı anlamına mı geliyorsunuz? Sadece pencerenin içeriğinin bir kısmını şeffaf bir şekilde ayarlayabileceğinizi düşünmüyorum, hepsini şeffaflaştırmalı ve şeffaf istemediğinizi çizmelisiniz. –

+1

@acreek: Pencerenin bir kısmının şeffaf olmasını istediğinizde, [mywindow setOpaque: NO] 'u çağırmanın mantıklı olacağını düşünüyorum. Ayrıca setBackgroundColor: 'öğesini çağırmak gerekebilir. Dokümanlar kesinlikle daha net olabilirdi. – JWWalker

İlgili konular