2011-01-13 16 views
11

के केंद्र में एक सबव्यू को संरेखित कैसे करें मैं एक प्रोग्राम विकसित कर रहा हूं जिसमें मैं प्रोग्रामिंग रूप से एक कस्टम NSView क्लास में एनएसआईमेज व्यू जोड़ रहा हूं। छवि-दृश्य बनाने के दौरान, मैं मूल कंटेनर के फ्रेम को पार कर रहा हूं।अभिभावक 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; 
} 

तब मैं addSubView विधि का उपयोग कर रहा कस्टम दृश्य में जोड़ने के लिए। समस्या यह है कि छवि मूल दृश्य के निचले बाएं हिस्से में चिपक जाती है। मैं इस छवि को मूल दृश्य के केंद्र में कैसे रख सकता हूं?

मैंने फ्रेम उत्पत्ति में ऑफसेट जोड़ने का प्रयास किया है, लेकिन जब विंडो का आकार बदलता है, तो यह वास्तव में काम नहीं करता है, या यदि एक अलग आकार वाली छवि लोड हो जाती है।

किसी भी मदद की सराहना की जाएगी।

उत्तर

37

मुझे यकीन नहीं है कि यह करने का यह सबसे अच्छा तरीका है, लेकिन जब मैं अपने माता-पिता के अंदर एक सबव्यूव सेंटर करना चाहता हूं तो मैं बस सरल गणित करता हूं।

यदि आप इसे केंद्रित रखना चाहते हैं तो आपको सभी मार्जिन ऑटो-रेजिजेबल होने की आवश्यकता है।

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

यह सिर्फ एक केंद्रित उत्पत्ति प्राप्त करने के लिए आवश्यक मार्जिन की गणना कर रहा है।

यदि आपको initWithFrame: का आह्वान करने से पहले केंद्र केंद्रित फ्रेम की आवश्यकता है तो फ्रेम मूल मानों की गणना करने के लिए उपर्युक्त तर्क का उपयोग करें।

+1

तुम भी, पूर्णांकों के लिए सभी विभाजन परिणाम पूर्णांक बनाना जैसे कि यह अजीब है चाहते हो सकता है और आप .5 के साथ अंत में, यह उपपिक्सेल स्थिति के साथ फजी हो जाएगा। – Jaanus

+0

हाँ, यह निश्चित रूप से सच है। – d11wtq

+0

ग्रेट उत्तर, धन्यवाद –

-4

इसे आजमाएं। ज

@property (मजबूत, nonatomic) IBOutlet UIView * CoinsPurchaseView में ;

मीटर

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

प्रश्न 'NSView'' UIView' के बारे में नहीं था। 'NSView' में 'केंद्र' विशेषता नहीं है। –