2012-08-25 32 views
0

我試圖以編程方式創建一個無邊界NSWindow接近鼠標光標以及它應該顯示的圖像的大小。不過,我總是會得到一個更大的窗口(每邊大約是它應該是的三倍)!我仔細檢查了我的imageObj具有正確的大小,並且所有的NSSize和NSRect結構都使用正確的值創建。已註釋的行也不能正常工作(但是這將是正確的?)以編程方式創建具有特定大小的NSWindow失敗

我已經通過此網站搜索,但我找不到任何類似的問題...我做錯了什麼? 這裏是我的代碼:

NSString* imageName = [[NSBundle mainBundle] pathForResource:@"os_unknown" ofType:@"icns"]; 
NSImage* imageObj = [[NSImage alloc] initWithContentsOfFile:imageName]; 
[view setImage:imageObj]; 

NSSize s = [imageObj size]; 
NSPoint p = [NSEvent mouseLocation]; 
NSRect r = [NSWindow frameRectForContentRect:NSMakeRect(p.x, p.y, s.width, s.height) 
            styleMask:NSBorderlessWindowMask]; 
//NSRect r = {p, s}; 

if (win) [win release]; 
win = [[NSWindow alloc] initWithContentRect:r 
            styleMask:NSBorderlessWindowMask 
            backing:NSBackingStoreBuffered 
             defer:false]; 
[win setLevel:kCGUtilityWindowLevel]; 

[view setBounds:NSMakeRect(0, 0, s.width, s.height)]; 
[[win contentView] addSubview:view]; 
[win orderFront:sender];  

這裏*取勝是一個NSWindow和*視圖是一個NSImageView。兩者都是在我的源文件之上聲明的。 我正在運行雪豹,所以任何嚴格的> 10.6.8代碼將無法正常工作(已經嘗試過)。

非常感謝您的幫助。

+0

我複製了你的代碼,它對我來說工作得很好。我使用10.8,但我不確定這會有什麼區別。我在代碼中看不到的一件事是如何創建圖像視圖和視圖。你用什麼代碼來創建它?你是否在應用的其他地方設置了它的任何屬性? – rdelmar

+0

還有一個想法 - 我不知道圖標文件的行爲與其他圖像的行爲不同。你可以用jpeg試一下,看看你是否還有同樣的問題。 – rdelmar

+0

解決!謝謝,你讓我得到解決方案! 實際上,NSImageView是在InterfaceBuilder中創建的,(你讓我想到了這一點)它包含一個NSImageCell。我注意到,我得到的大小總是在Interface Builder中設置的大小,不管我以編程方式做了什麼。顯然有一些非常重要的信息我錯過了以這種方式獲得正確的東西......我現在通過編程創建了NSImageView ex novo,並且一切正常。非常感謝你! – gianluca

回答

0

解決! NSImageView *view是在Interface Builder中創建的。我得到的大小是在那裏設置的大小,無論我用什麼代碼調整大小。通過編程創建NSImageView,一切都很好!

特別感謝rdelmar誰讓我想到並得到解決方案!

相關問題