2009-06-27 17 views
5

Bien, creo que me estoy perdiendo algo importante, y parece que no puedo encontrar la respuesta. Estoy publicando todo el código, porque es muy pequeño.iPhone: ¿por qué no se llama a drawRect?

¿Alguien puede por favor dime lo que estoy haciendo mal? He trabajado en esto viendo ejemplo tras ejemplo, durante bastante tiempo, y nada de lo que hago parece funcionar.

Cuando creo la aplicación, utilizo el esqueleto que me proporcione un UIViewController. Puse una vista en el controlador. Creo las variables para vincular al controlador. Cuando trato de conectar el UIView en mi plumilla a mi UIView, el compilador está de acuerdo, pero también insiste en conectarse a "ver" también, o la aplicación se cuelga. No me sorprendería que ese sea el problema, pero si lo es, no puedo resolver cómo solucionarlo.

Aquí está el código:

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 

Respuesta

14

drawRect es un método de UIView y no de UIViewController, es por eso que no está siendo llamado.

En su caso, parece que necesita crear su UIView personalizado y sobrescribir drawRect en él, y no en su subclase UIViewController.

Cuestiones relacionadas