एक छोटी सी पृष्ठभूमि: मैं CS193P iTune वीडियो के माध्यम से जा रहा हूं और मैं सबसे लंबे समय तक असाइनमेंट 3 पर फंस गया था। असल में, असाइनमेंट आपको स्क्रीन पर एक आकृति प्रदर्शित करने के लिए प्रोग्रामेटिक रूप से एक कस्टम दृश्य बनाने के लिए कहता है। मैं रास्ते में किसी भी दृश्य नियंत्रक का उपयोग नहीं कर रहा हूँ।आईओएस में प्रोग्रामेटिक रूप से दृश्य बनाना (यह कैसे काम करता है)?
मुझे तब तक प्रदर्शित करने के लिए मेरा दृश्य नहीं मिला जब तक कि अंत में मैंने इंटरफ़ेस बिल्डर में एक व्यू ऑब्जेक्ट खींच लिया और ऑब्जेक्ट का नाम मेरी कस्टम व्यू क्लास में बदल दिया। तो मेरा सवाल यह है कि जब लोग प्रोग्रामेटिक रूप से एक दृश्य बनाते हैं, तो क्या वे सिर्फ मैन्युअल रूप से कक्षा बनाते हैं लेकिन जब आपको इसे प्रदर्शित करने की आवश्यकता होती है तो आईबी का उपयोग करें? मैं महसूस करने में मदद नहीं कर सकता जैसे मैंने कुछ गलत समझा?
संपादित करें: मुझे और स्पष्ट होने दें। मेरा कस्टम व्यू 0, 0, 200, 150 के फ्रेम के साथ शुरू किया गया है और इसमें एक वर्ग बनाने के लिए drawRect अतिप्रवाह है। मेरा विचार भी दिखाई नहीं देता है, तो कोशिश मेरी नियंत्रक के भीतर मुख्य विंडो में जोड़ने:
UIWindow* window = [UIApplication sharedApplication].keyWindow;
[window addSubview:polygonView];
हालांकि, अगर उपयोग खींचें आईबी में एक दृश्य और मेरे विचार वर्ग के लिए वर्ग बदलने के लिए, इसे ठीक से पता चलता।
संपादित करें: कुछ कोड जोड़ा गया। यह मेरा नियंत्रक जागृत है FromNib विधि जहां दृश्य खींचा जाना चाहिए। मेरी नियंत्रक के updateInterface विधि के
- (void)awakeFromNib {
shape = [[PolygonShape alloc] initWithNumberOfSides:numberOfSidesLable.text.integerValue minimumNumberOfSides:3 maximumNumberOfSides:12];
polygonView = [[PolygonView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
UIWindow *window = [UIApplication sharedApplication].keyWindow;
polygonView.backgroundColor = [UIColor blackColor];
[window addSubview:polygonView];
[self updateInterface];
}
भाग:
- (void)updateInterface {
[polygonView setPolygon:shape];
[polygonView setNeedsDisplay];
...
}
PolygonView.h
#import <UIKit/UIKit.h>
#import "PolygonShape.h"
@interface PolygonView : UIView {
IBOutlet PolygonShape *polygon;
}
@property (readwrite, assign) PolygonShape *polygon;
- (void)drawRect:(CGRect)rect;
@end
PolygonView.m
#import "PolygonView.h"
@implementation PolygonView
@synthesize polygon;
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
nslog(@"initialized");
}
return self;
}
- (void)drawRect:(CGRect)rect {
CGRect bounds = [self bounds];
[[UIColor grayColor] set];
UIRectFill(bounds);
CGRect square = CGRectMake(10, 10, 10, 100);
[[UIColor blackColor] set];
UIRectFill(square);
[[UIColor redColor] set];
UIRectFill(square);
NSLog(@"drawRect called");
}
@end
polygonView प्रारंभ की जा रही है लेकिन drawRect प्रतिसाद नहीं शांत नहीं हो रहा है घ।
कुंजीविंडो कहां बनाया जा रहा है? यदि आप एक निब फ़ाइल लोड नहीं कर रहे हैं (यह आपके प्रश्न से स्पष्ट नहीं है कि आप हैं या नहीं), तो आपको अपना सबव्यूव जोड़ने से पहले विंडो बनाना होगा। – jlehr
यह ऐपडिलेगेट क्लास में बनाया जा रहा है। क्या इसका मतलब है कि मुझे # पॉलीगॉन व्यू क्लास को वहां भेजना है और इसे वहां बनाना है? –
दिलचस्प बात यह है कि अगर मैंने अपने अपडेट इंटरफेस विधि में विंडो में प्रारंभिकता और अपना दृश्य जोड़ना शुरू किया है, तो यह काम करता है, लेकिन जब मैं विधि को कॉल करने वाले बटन पर क्लिक करता हूं। ऐसा लगता है जैसे कोड जागने में प्रक्रिया नहीं हो रहा है FromNib। कोई विचार? –