2011-01-13 46 views
11

Tôi đang phát triển một chương trình mà tôi đang thêm lập trình NSImageView vào lớp NSView tùy chỉnh. Trong khi tạo chế độ xem hình ảnh, tôi đang chuyển khung của vùng chứa chính.Cách căn chỉnh chế độ xem phụ với trung tâm của một phụ huynh NSView

-(NSImageView *)loadNSImage:(NSString *)imageName frame:(NSRect)frame{ 
    imageName = [[NSBundle mainBundle] pathForResource:imageName ofType:@"png"]; 
    NSImage *image = [[NSImage alloc] initWithContentsOfFile:imageName]; 
    NSImageView *imageView = [[NSImageView alloc]initWithFrame:frame]; 
    [imageView setImage:image]; 
    [imageView setImageScaling:NSImageScaleProportionallyUpOrDown]; 
    [imageView setAutoresizingMask:NSViewHeightSizable | NSViewWidthSizable | NSViewMaxXMargin | NSViewMaxYMargin | NSViewMinXMargin | NSViewMinYMargin]; 
    [imageView setImageAlignment:NSImageAlignCenter]; 
    [image release]; 
    return imageView; 
} 

Sau đó, tôi đang sử dụng phương pháp addSubView để thêm mục này vào Chế độ xem tùy chỉnh. Vấn đề là hình ảnh dính vào phía dưới bên trái của khung nhìn cha mẹ. Làm cách nào để đặt hình ảnh này ở giữa chế độ xem chính?

Tôi đã thử thêm một bù đắp cho gốc khung, nhưng điều đó không thực sự hoạt động khi cửa sổ được thay đổi kích thước hoặc nếu hình ảnh có kích thước khác được tải.

Mọi trợ giúp sẽ được đánh giá cao.

Trả lời

37

Tôi không chắc đây có phải là cách tốt nhất để làm điều đó hay không, nhưng tôi chỉ làm toán đơn giản khi tôi muốn căn giữa chế độ xem phụ trong cha mẹ của nó.

Bạn cần đặt tất cả các lề có thể tự động thay đổi kích thước nếu bạn muốn nó ở giữa.

[subview setFrameOrigin:NSMakePoint(
    (NSWidth([parentView bounds]) - NSWidth([subview frame]))/2, 
    (NSHeight([parentView bounds]) - NSHeight([subview frame]))/2 
)]; 
[subview setAutoresizingMask:NSViewMinXMargin | NSViewMaxXMargin | NSViewMinYMargin | NSViewMaxYMargin]; 

Đây chỉ là tính lề cần thiết để có được nguồn gốc trung tâm.

Nếu bạn cần khung trung tâm trước khi gọi initWithFrame: thì chỉ cần sử dụng logic trên để tính giá trị gốc khung.

+1

Bạn cũng có thể muốn làm tròn tất cả các kết quả phân chia để số nguyên, như thể đó là kỳ quặc và bạn kết thúc với .5, nó sẽ mờ với vị trí subpixel. – Jaanus

+0

Vâng, điều này chắc chắn đúng. – d11wtq

+0

Câu trả lời hay, cảm ơn –

-4

Hãy thử tính năng này. in .h

@property (mạnh, nonatomic) IBOutlet UIView * CoinsPurchaseView;

trong .m

self.CoinsPurchaseView.center = self.view.center; 
    [self.view addSubview:self.CoinsPurchaseView]; 
+1

Câu hỏi là về 'NSView' không phải' UIView'. 'NSView' không có thuộc tính' center'. –

Các vấn đề liên quan