5 Stimmen

iPhone: warum wird drawRect nicht aufgerufen?

Okay, ich glaube, ich übersehe etwas Wichtiges, und ich kann nicht scheinen, um die Antwort zu finden. Ich poste den gesamten Code, weil er sehr klein ist.

Kann jemand bitte mir sagen, was ich falsch mache? Ich habe eine ganze Weile daran gearbeitet und mir ein Beispiel nach dem anderen angesehen, aber nichts scheint zu funktionieren.

Wenn ich die App erstelle, verwende ich das Skelett, das mir einen UIViewController liefert. Ich setze einen View auf den Controller. Ich erstelle die Variablen zur Verknüpfung mit dem Controller. Wenn ich versuche, die UIView in meiner Nib mit meiner UIView zu verbinden, ist der Compiler damit einverstanden, aber er besteht auch darauf, mit "view" verbunden zu werden, sonst stürzt die App ab. Ich wäre nicht überrascht, wenn das das Problem ist, aber wenn es ist, kann ich nicht herausfinden, wie es zu beheben.

Hier ist der 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

15voto

epatel Punkte 45365

DrawRect: ist eine Methode für UIView-Unterklassen. Versuchen Sie, UIView zu subclassen und ändern Sie den Typ der UIView in InterfaceBuilder (siehe Bild).

Alt-Text http://img.skitch.com/20090627-xetretcfubtcj7ujh1yc8165wj.jpg

14voto

pgb Punkte 24353

drawRect ist eine Methode aus UIView und nicht von UIViewController Deshalb wird sie nicht abgerufen.

In Ihrem Fall scheint es so, als müssten Sie eine eigene UIView und überschreiben drawRect darin, und nicht in Ihrem UIViewController Unterklasse.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X