2009-06-09 12 views
7

यह पता लगाने की कोशिश कर रहा हूं कि मैं यहां क्या कर रहा हूं। कई चीजों की कोशिश की है, लेकिन मैं स्क्रीन पर उस छद्म आयत को कभी नहीं देखता हूं। अभी, मैं बस इतना करना चाहता हूं - बस स्क्रीन पर एक आयत खींचें।शुरुआती आईफोन प्रश्न: एक आयताकार ड्राइंग। मैं क्या गलत कर रहा हूं?

मुझे सबकुछ पर "अमान्य संदर्भ" मिल रहा है लेकिन CGContextSetRGBFillColor()। इसके बाद संदर्भ प्राप्त करना मेरे लिए बहुत गलत लगता है, लेकिन मैं घर पर नहीं देख रहा हूं कि मैं कल रात का उपयोग कर रहा था।

क्या मैंने कुछ और गड़बड़ कर ली है? मैं वास्तव में इस आज रात कम से कम कुछ किया प्राप्त करना चाहते हैं ...

- (id)initWithCoder:(NSCoder *)coder 
{ 
    CGRect myRect; 
    CGPoint myPoint; 
    CGSize mySize; 
    CGContextRef context; 

    if((self = [super initWithCoder:coder])) { 
    NSLog(@"1"); 
    currentColor = [UIColor redColor]; 
    myPoint.x = (CGFloat)100; 
    myPoint.y = (CGFloat)100; 
    mySize.width = (CGFloat)50; 
    mySize.height = (CGFloat)50; 
    NSLog(@"2"); 
    // UIGraphicsPushContext (context); 
    NSLog(@"3"); 
    CGContextSetRGBFillColor(context, 1.0, 0.0, 0.0, 1.0); 
    context = UIGraphicsGetCurrentContext(); 
    CGContextSetFillColorWithColor(context, currentColor.CGColor); 
    CGContextAddRect(context, myRect); 
    CGContextFillRect(context, myRect); 
    } 

    return self; 

} 

धन्यवाद,

शॉन।

उत्तर

9

आपको initWithCoder में सीजी कोड डालना नहीं है। उस संदेश का उपयोग केवल प्रारंभिक उद्देश्य के लिए किया जाना चाहिए। व्यू-आधारित टेम्पलेट के साथ शुरू

- (void)drawRect:(CGRect)rect 

आप एक UIView उपवर्गीकरण रहे हैं, तो ...

+12

इसके अलावा, आपको सीधे drawRect को कॉल नहीं करना चाहिए, लेकिन इसके बजाय setNeedsDisplay को कॉल करें, इसलिए ओएस इसे उठाता है और बाद में दृश्य को फिर से चलाता है। – pgb

+0

हां। ये सही है। –

+0

ठीक है, तो मुझे सामान खींचने के लिए initWithCoder() का उपयोग नहीं करना चाहिए। लेकिन क्या वह वास्तव में मेरे प्रश्न का उत्तर देता है? सीजी कोड को दूसरे कार्य में ले जा रहा है जिससे आयताकार खींचा जा सकता है या नहीं? और ड्रॉरेक्ट का उपयोग करने/उपयोग करने के लिए, अब आप मुझे भ्रमित करने में कामयाब रहे हैं। क्या आप कह रहे हैं कि मुझे drawRect में अपने आयत के लिए सभी पैरामीटर डालना चाहिए? यह सही प्रतीत नहीं होता है, या तो - अगर मैं एक से अधिक आयतों को आकर्षित करना चाहता हूं तो क्या होगा? यदि वहां एक साधारण उदाहरण ऐप है जो * बस * आयताकार या सर्कल या कुछ खींचता है, तो मैं इसे देखना चाहता हूं। शॉन। –

40

, दराज नामक एक परियोजना बनाने:

में अपने ड्राइंग कोड रखो। अपनी परियोजना में एक UIView कक्षा जोड़ें। इसे स्क्वायर व्यू (.h और .m) नाम दें।

DrawerViewController.xib डबल क्लिक करें इंटरफ़ेस बिल्डर में खोलने के लिए। कक्षा पॉपअप मेनू का उपयोग कर पहचान निरीक्षक (कमांड -4) में स्क्वायर व्यू पर सामान्य दृश्य को बदलें। सहेजें और पर वापस जाएं Xcode

drawRect में यह कोड डालें:

- (void)drawRect:(CGRect)rect; 
{ 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSetRGBStrokeColor(context, 1.0, 1.0, 0.0, 1.0); // yellow line 

    CGContextBeginPath(context); 

    CGContextMoveToPoint(context, 50.0, 50.0); //start point 
    CGContextAddLineToPoint(context, 250.0, 100.0); 
    CGContextAddLineToPoint(context, 250.0, 350.0); 
    CGContextAddLineToPoint(context, 50.0, 350.0); // end path 

    CGContextClosePath(context); // close path 

    CGContextSetLineWidth(context, 8.0); // this is set from now on until you explicitly change it 

    CGContextStrokePath(context); // do actual stroking 

    CGContextSetRGBFillColor(context, 0.0, 1.0, 0.0, 0.5); // green color, half transparent 
    CGContextFillRect(context, CGRectMake(20.0, 250.0, 128.0, 128.0)); // a square at the bottom left-hand corner 
} 

आप नहीं करते: अपने SquareView.m फ़ाइल की विधि एक बड़े, कुटिल, खाली पीला आयत और एक छोटा सा, हरे, पारदर्शी वर्ग आकर्षित करने के लिए ड्राइंग के लिए इस विधि को कॉल करना होगा। आपका व्यू कंट्रोलर प्रोग्राम लॉन्च होने पर कम से कम एक बार आकर्षित करने के लिए दृश्य को बताएगा और एनआईबी फाइलें सक्रिय होंगी।

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