Ich bin ein Anfänger in iOS-Programmierung, so tut mir leid, wenn meine Frage eine dumme Frage ist.UIView Unterklasse: drawRect nicht aufgerufen
Ich versuche, eine App zu machen, die benutzerdefinierte Zeichnung auf einem geladenen Bild ausführt.
Um es zu tun, fand ich heraus, dass eine Lösung zu Unterklasse UIView
und bearbeiten Sie die drawRect
Methode.
Ich machte das auf den folgenden Code, der auf einem IBAction
aktiviert mit einer Schaltfläche in der Interface Builder Storyboard-Datei verknüpft.
UIImageView *image = [[UIImageView alloc] initWithImage: [UIImage imageNamed: @"SampleImage.jpg"]];
image.frame = previewView.frame;
[image setContentMode:UIViewContentModeScaleAspectFit];
[previewView addSubview:image];
customView *aCustomView = [[customView alloc] initWithFrame: CGRectMake(image.bounds.origin.x, image.bounds.origin.y, image.bounds.size.width, image.bounds.size.height)];
[previewView addSubview:aCustomView];
customView
ist die UIView
Unterklasse, die ich erstellt, deren init
und drawRect
Methoden sind wie folgt festgelegt:
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
NSLog(@"INITIALIZING");
if (self) {
// Initialization code
[self setBackgroundColor:[UIColor clearColor]];
}
return self;
}
- (void)drawRect:(CGRect)rect
{
CGContextRef ctx = UIGraphicsGetCurrentContext();
NSLog(@"DRAWING");
CGContextClearRect(ctx, rect);
CGContextSetRGBFillColor(ctx, 0, 255, 0, 0.3);
CGContextFillEllipseInRect(ctx, rect);
CGContextSetRGBStrokeColor(ctx, 255, 0, 0, 1);
CGContextSetLineWidth(ctx, 2);
CGContextStrokeEllipseInRect(ctx, rect);
}
Das Problem, das ich habe, ist, dass keine Zeichnung gemacht wird und auf NSLog
Ich habe die "INITIALIZING" Nachricht, aber nicht die Zeichnung "Zeichnung".
Also im Grunde macht es die initWithFrame
, aber es ruft nicht die drawRect
Methode.
Können Sie mir bitte zeigen, was mache ich falsch?
Danke, indem ich den NSLog habe ich herausgefunden, dass etwas falsch beim Aufruf der DrawRect-Methode war. Durch Hinzufügen des [previewView setNeedDisplay] wird die Methode aufgerufen, aber nicht, wenn ich es erwarte. Ich meine, die Ausführung der Zeile [previewView setNeedDisplay] führt nicht dazu, dass die benutzerdefinierte Zeichnung angezeigt wird, sondern durch spätere Code-Schritte. Ich würde gerne verstehen, in welchem Moment die Methode drawRect aufgerufen wird, aber trotzdem ist das anfängliche Problem gelöst, danke :) – Dobrodeveloper