2009-06-27 10 views
5

Bon, je suppose qu'il me manque quelque chose d'important, et je n'arrive pas à trouver la réponse. Je poste tout le code, parce que c'est très petit.iPhone: pourquoi DrawRect n'est pas appelé?

Quelqu'un peut s'il vous plaît dites-moi ce que je fais mal? J'ai travaillé sur cela en regardant l'exemple après l'autre, pendant un bon moment, et rien de ce que je fais ne semble fonctionner. Quand je crée l'application, j'utilise n'importe quel squelette qui me donne un UIViewController. Je mets une vue sur le contrôleur. Je crée les variables à lier dans le contrôleur. Lorsque j'essaie de connecter l'UIView dans ma plume à mon UIView, le compilateur est d'accord avec ça, mais il insiste aussi pour être connecté à "view" aussi, ou l'application plante. Je ne serais pas surpris si c'est le problème, mais si c'est le cas, je n'arrive pas à trouver une solution.

Voici le code:

DotsieAppDelegate.h:

#import <UIKit/UIKit.h> 

@class DotsieViewController; 

@interface DotsieAppDelegate : NSObject <UIApplicationDelegate> { 
    UIWindow *window; 
    DotsieViewController *viewController; 
} 

@property (nonatomic, retain) IBOutlet UIWindow *window; 
@property (nonatomic, retain) IBOutlet DotsieViewController *viewController; 

@end 

DotsieAppDelegate.m

#import "DotsieAppDelegate.h" 
#import "DotsieViewController.h" 

@implementation DotsieAppDelegate 

@synthesize window; 
@synthesize viewController; 


- (void)applicationDidFinishLaunching:(UIApplication *)application {  

    // Override point for customization after app launch  
    [window addSubview:viewController.view]; 
    [window makeKeyAndVisible]; 
} 


- (void)dealloc { 
    [viewController release]; 
    [window release]; 
    [super dealloc]; 
} 


@end 

DotsieViewController.h

#import <UIKit/UIKit.h> 

@interface DotsieViewController : UIViewController { 

    UIView *dotsieView; 

} 

@property (nonatomic, retain) IBOutlet UIView *dotsieView; 

@end 

DotsieViewController.m

#import "DotsieViewController.h" 

@implementation DotsieViewController 

@synthesize dotsieView; 

-(void)drawRect:(CGRect)rect { 
    NSLog(@"here"); 
    CGRect currentRect = CGRectMake(50,50,20,20); 
    UIColor *currentColor = [UIColor redColor]; 

    CGContextRef context = UIGraphicsGetCurrentContext(); 

    CGContextSetLineWidth(context, 2.0); 
    CGContextSetStrokeColorWithColor(context, currentColor.CGColor); 

    CGContextSetFillColorWithColor(context, currentColor.CGColor); 
    CGContextAddEllipseInRect(context, currentRect); 
    CGContextDrawPath(context, kCGPathFillStroke); 
    // [self.view setNeedsDisplay]; 
} 



// The designated initializer. Override to perform setup that is required before the view is loaded. 
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { 
     // Custom initialization 
    } 
    [self.view setNeedsDisplay]; 
    return self; 
} 
- (void)didReceiveMemoryWarning { 
    // Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning]; 

    // Release any cached data, images, etc that aren't in use. 
} 

- (void)viewDidUnload { 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 
} 


- (void)dealloc { 
    [super dealloc]; 
} 

@end 

Répondre

14

drawRect est une méthode de UIView et non de UIViewController, c'est pourquoi il est pas appelé.

Dans votre cas, il semble que vous ayez besoin de créer votre UIView personnalisé et d'y remplacer drawRect, et non votre sous-classe UIViewController. DrawRect: est une méthode pour les sous-classes UIView.