2012-04-19 13 views
6

का उपयोग करके ढाल के रूप में पृष्ठभूमि रंग असाइन करें मैंने एक्सकोड 4.3 में मास्टर-विस्तार दृश्य टेम्पलेट के साथ खेलना शुरू कर दिया है और मैं मास्टर के पृष्ठभूमि रंग को बदलने और इसे रंगीन ढाल पर सेट करने की कोशिश कर रहा हूं। MasterViewController.mआईओएस UITableView: CAGradientLayer

import "Colors.h" 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"]; 

    CAGradientLayer *bgLayer = [Colors navigationMenuGradient]; 
    bgLayer.frame = tableView.bounds; 
    [tableView.layer insertSublayer:bgLayer atIndex:0]; 

    return cell; 
} 

Colors.m

#import "Colors.h" 

@implementation Colors 

+ (UIColor *) navigationMenuGradientTop 
{ 
    return [UIColor colorWithRed:213.0f/255.0f green:91.0f/255.0f blue:92.0f/255.0f alpha:1.0f]; 
} 

+ (UIColor *) navigationMenuGradientBottom 
{ 
    return [UIColor colorWithRed:188.0f/255.0f green:0.0f/255.0f blue:1.0f/255.0f alpha:1.0f];  
} 

+ (CAGradientLayer *) navigationMenuGradient 
{ 
    NSArray *colors = [NSArray arrayWithObjects:(id)self.navigationMenuGradientTop, self.navigationMenuGradientBottom, nil]; 
    CAGradientLayer *gradientLayer = [CAGradientLayer layer]; 
    gradientLayer.colors = colors; 

    return gradientLayer; 
} 
@end 

मैं main में निम्न त्रुटि प्राप्त चल रहे होने पर - Thread 1: EXC_BAD_ACCESS (code=1, address=0xxxxxxxx)

int main(int argc, char *argv[]) 
{ 
    @autorelasespool { 
     return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 
    } 
} 

मैं: यहाँ मैं क्या करने की कोशिश की है परियोजना में क्वार्ट्जकोर फ्रेमवर्क भी जोड़ा है । मैं यहाँ क्या खो रहा हूँ? और जब ऐसी त्रुटियां होती हैं तो मुझे आमतौर पर किस दिशा में जाना चाहिए (क्योंकि निर्माण सफल हुआ, ऐप यहां क्रैश हो गया है)?

+0

[UIView पर और iPhone पर UILabels ग्रेडिएंट] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/422066/gradients-on-uiview-and-uilabels-on-iphone) –

उत्तर

22
UIView *view = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 100)] autorelease]; 
CAGradientLayer *gradient = [CAGradientLayer layer]; 
gradient.frame = view.bounds; 
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor blackColor] CGColor], (id)[[UIColor whiteColor] CGColor], nil]; 
[view.layer insertSublayer:gradient atIndex:0]; 

से: Gradients on UIView and UILabels On iPhone

इस कोड को अपनी समस्या के कर सकते हैं।

+3

ठीक है तो ऐसा लगता है कि 'CAGradientLayer' 'UIColor' की सरणी के साथ काम नहीं करता है। इसके बजाय एक 'CGColor' सरणी की आवश्यकता है। दस्तावेज़ीकरण में एक त्वरित रूप ने इसकी पुष्टि की। http://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CAGradientLayer_class/Reference/Reference.html – vikmalhotra

+0

मैंने कभी भी उस रंग का उपयोग नहीं किया, इसलिए मुझे कोई जानकारी नहीं है, लेकिन मैं आपकी समस्या को हल करने की कोशिश कर रहा था –

+1

जोड़ें [यूआईसीओलर] ब्लॉक के अंत तक .CGColor। उदाहरण के लिए '[यूआईसीओलर ब्लैककॉलर] .CGColor' – Moe

2

एक दृश्य के लिए एक पृष्ठभूमि ढाल जोड़ने के लिए मैं इस लिंक पर ट्यूटोरियल का पालन किया:

http://danielbeard.wordpress.com/2012/02/25/gradient-background-for-uiview-in-ios/

मेरे मामले में मैं एक UITableView था और ढाल में बनना चाहता था पृष्ठ - भूमि। जब मैंने लिंक से नीचे दिए गए कोड का उपयोग किया तो मेरा टेबलव्यू गायब हो गया।

-(void) ViewWillAppear:(BOOL) animated { 
CAGradientLayer *bgLayer = [BackgroundLayer blueGradient]; 
bgLayer.frame = self.view.bounds; 
[self.view.layer insertSublayer:bgLayer atIndex:0]; 
} 

नीचे दिए गए मेरे कोड को संशोधित करने पर, पृष्ठभूमि पृष्ठभूमि ढाल और एक ही समय में एक टेबलव्यू होना संभव था।

-(void) ViewDidAppear:(BOOL) animated { 
CAGradientLayer *bgLayer = [BackgroundLayer blueGradient]; 
bgLayer.frame = self.view.bounds; 
[self.tableView.layer insertSublayer:bgLayer atIndex:0]; 
} 
+0

क्या यह सिर्फ दूसरे दो उत्तरों को एक साथ जोड़ता है? – paqogomez

+0

यह भी दिखाई देगा कि आपके पास एक और खाता है जिसका उपयोग आप स्वयं को ऊपर उठाने के लिए करते हैं। – paqogomez