Jestem początkującym programistom iOS, więc przepraszam, jeśli moje pytanie jest głupie pytanie.Podklasa UIView: drawRect nie nazywane
Próbuję utworzyć aplikację, która wykonuje niestandardowy rysunek na załadowanym obrazie.
Aby to zrobić, dowiedziałem się, że rozwiązaniem jest podklasa UIView
i edycja metody drawRect
.
Zrobiłem to na poniższym kodzie, który aktywuje się na IBAction
połączony z przyciskiem w pliku scenariusza programu Interface Builder.
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
jest UIView
podklasa że stworzyłem, którego init
i drawRect
metody są ustawione tak:
- (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);
}
Problem, który mam jest, że żaden rysunek wykonany i na NSLog
mam Komunikat "INICJALIZACJA", ale nie rysunek "RYSOWANIE".
Zasadniczo stanowi to initWithFrame
, ale nie wywołuje metody drawRect
.
Czy możesz wskazać mi, co robię źle?
Dzięki, umieszczając NSLog dowiedziałem się, że coś było nie tak w wywołaniu metody drawRect. Po dodaniu [previewView setNeedDisplay] wywoływana jest metoda, ale nie wtedy, gdy oczekuję, że zostanie wykonana. Mam na myśli, że wykonując kroki kodu, wykonanie linii [previewView setNeedDisplay] nie powoduje pojawienia się niestandardowego rysunku, zamiast tego pojawia się później w jakiś sposób. Chciałbym zrozumieć, w którym momencie wywoływana jest metoda drawRect, ale mimo to początkowy problem został rozwiązany, dzięki :) – Dobrodeveloper