2010-10-10 13 views
7

मैं अपने NSView में एक दोहराई जाने वाली पृष्ठभूमि छवि आकर्षित करने के लिए कोशिश कर रहा हूँ में दोहराए जाने पृष्ठभूमि छवि, मैं अब तक इस राशि:एक NSView

// INIT 
- (id)initWithFrame:(NSRect)frame { 
    if (self = [super initWithFrame:frame]) { 
    self.backgroundImage = [NSImage imageNamed:@"progressBackground.pdf"]; 
    } 

    return self; 
} 

// DRAW 
- (void)drawRect:(NSRect)dirtyRect { 
    // Draw the background 
    [backgroundImage drawInRect:[self bounds] 
        fromRect:NSMakeRect(0.0f, 0.0f, backgroundImage.size.width, backgroundImage.size.height) 
        operation:NSCompositeSourceAtop 
        fraction:1.0f]; 
    NSLog(@"%dx%d", backgroundImage.size.width, backgroundImage.size.height); 
} 

हालांकि, दृश्य छवि फैला ही भरने के लिए। मैं छवि को इसके बजाय दोहराना चाहता हूं।

alt text (काला स्ट्रोक पहले से ही तय कर रहे हैं)

इसके अलावा, कुछ अजीब होता है, कंसोल का कहना है के रूप में छवि का आकार के बराबर होती है -2109897792x0, लेकिन छवि वास्तव में 32x32 है! WTF ?!

क्या कोई मेरी मदद कर सकता है, कृपया? धन्यवाद।

+2

संभावित रूप से आपके द्वारा प्राप्त किए गए असंबद्ध उत्तरों के लिए मतदान करने की धमकी देने का सबसे अच्छा विचार नहीं है। यह लोगों को भी परेशान होने से हतोत्साहित करता है। –

+2

@ जोशुआ लेकिन गलत मंच के बारे में जवाब प्राप्त करना बहुत परेशान है। –

+0

निश्चित रूप से आप वास्तविक उल्लंघन के परिणामस्वरूप किसी को कुछ भी गलत करने और ऐसा करने से पहले लोगों को सलाह देने के बीच अंतर देखते हैं। पूर्व सबसे अच्छा असभ्य है; उत्तरार्द्ध अधिक योग्य है। –

उत्तर

20

आप +[NSColor colorWithPatternImage:] के साथ एक पैटर्न रंग बना सकते हैं और फिर उस "रंग" के साथ पृष्ठभूमि आयताकार भरें। ऐसा करना चाहिए जो आप पूरा करना चाहते हैं।

+0

कूल! यह काम करता हैं। = डी –

+2

ध्यान रखें कि यह खिड़की के नीचे (दस्तावेज़ों के अनुसार) के सापेक्ष है। जैसे ही आप खिड़की का आकार बदलते हैं (और दृश्य प्रतिक्रिया में आकार बदलता है), पैटर्न के ऊपरी-बाएं बिंदु चल रहे होंगे (पृष्ठभूमि को आपके पैटर्न वाले दृश्य के किसी भी सबव्यू के पीछे "तैरने" के कारण)। यह उल्टी हो सकती है। :-) –

+3

मुझे पता है कि यह पोस्ट काफी पुरानी है, लेकिन मुझे यह सही समस्या है। शीर्ष पर "backgroundimage" डॉक बनाना संभव है? –

15

जब खिड़कियों का आकार बदलने मैं इस सवाल का जवाब यहाँ नीचे से ड्राइंग और उस अजीब प्रभाव देने से पैटर्न को रोकने के लिए मिला:

http://www.mere-mortal-software.com/blog/details.php?d=2007-01-08

मूल रूप से सब आप अपने drawRect में क्या करने की जरूरत आपके ग्राफिक्स संदर्भ को बचाने के लिए है राज्य, विधि को कॉल करें, अपना पैटर्न पेंट करें, फिर अपने राज्य को पुनर्स्थापित करें।

विधि है:

- (void)drawRect:(NSRect)dirtyRect { 
    NSGraphicsContext* theContext = [NSGraphicsContext currentContext]; 
    [theContext saveGraphicsState]; 
    [[NSGraphicsContext currentContext] setPatternPhase:NSMakePoint(0,[self frame].size.height)]; 
    [self.customBackgroundColour set]; 
    NSRectFill([self bounds]); 
    [theContext restoreGraphicsState]; 
} 

मैं init विधि में मेरी पृष्ठभूमि रंग पैटर्न प्रारंभ:

- (id)initWithFrame:(NSRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     self.customBackgroundColour = [NSColor colorWithPatternImage:[NSImage imageNamed:@"light-linen-texture.png"]]; 
    } 

    return self; 
} 
+1

दूसरों को यह ढूंढने में मदद करने के लिए कुछ महत्वपूर्ण शब्द जोड़ना: शीर्ष/शीर्ष पिनिंग –

+0

पर टाइल किए गए छवि दृश्य को पिन करें क्या किसी को पता है कि इस तरह के कोड को अभी भी टाइल करने के बजाय पैटर्न को फैलाने का क्या कारण होगा? मैंने देखा है कि मेरे drawRect को दृश्य आकार के रूप में नहीं बुलाया जा रहा है, शायद इसके साथ कुछ करने के लिए है? –

+0

उपर्युक्त टिप्पणी में अपने स्वयं के प्रश्न का उत्तर देना: मुझे अपनी दृश्य सेट की ज़रूरतें पूरी करनी थीं जब भी इसकी फ्रेम बदल जाती है, और मैं सेटफ्रेम को स्वयं करने के लिए ओवरराइड करता हूं। मुझे यकीन नहीं है कि यह करने का यह सामान्य तरीका है, या यदि कुछ अंतर्निर्मित तंत्र है जो कैलियर की ज़रूरतों के समान है डिस्प्लेऑनबाउंड चेंज, लेकिन यह काम कर रहा है। –

0

चेक बाहर RMSkinnedView Github पर!

संपादित करें: RMSkinnedView एक NSView उपवर्ग जहां, गोल कोनों, पृष्ठभूमि रंग, पृष्ठभूमि छवि पैटर्न, आदि सहित कई विकल्प, सेट कर सकते हैं सीधे उपयोगकर्ता निर्धारित क्रम इंटरफ़ेस बिल्डर में गुण के माध्यम से है।

संबंधित मुद्दे