/ / Po kliknięciu narysuj okrąg za pomocą kwarcu - grafika-c, kakao-dotyk, grafika kwarcowa

Narysuj okrąg po kliknięciu przy użyciu kwarcu - obiektyw-c, kakao-dotykowy, kwarcowy-grafika

Chcę narysować okrąg, gdy użytkownik kliknie dowolne miejsce na ekranie. Czego brakuje / jest źle w tym kodzie?

- (void)drawRect:(CGRect)rect
{
if (UITouchPhaseBegan)
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetRGBStrokeColor(context, 0, 0, 225, 1);
CGContextSetRGBFillColor(context, 0, 0, 255, 1);
CGRect rectangle = CGRectMake(50, 50, 500, 500);
CGContextStrokeEllipseInRect(context, rectangle);
}

}

Odpowiedzi:

1 dla odpowiedzi № 1

Twój kod nie działa tak, jak myślisz. Zobacz definicję UITouchPhaseBegan w UITouch.h:

typedef NS_ENUM(NSInteger, UITouchPhase) {
UITouchPhaseBegan,             // whenever a finger touches the surface.
UITouchPhaseMoved,             // whenever a finger moves on the surface.
UITouchPhaseStationary,        // whenever a finger is touching the surface but hasn"t moved since the previous event.
UITouchPhaseEnded,             // whenever a finger leaves the surface.
UITouchPhaseCancelled,         // whenever a touch doesn"t end but we need to stop tracking (e.g. putting device to face)
};

To tylko wartość wyliczana, a nie odzwierciedlenie tego, codzieje się w Twojej aplikacji. Uważam, że w tym przypadku, ponieważ jest to pierwsza wartość w wyliczeniu, kompilator prawdopodobnie ustawia ją na 0, a zatem zawsze przyjmuje wartość false.

To, co prawdopodobnie chcesz zrobić, to ustawić takie jak ivar BOOL _touchHasbegun;. Następnie w -touchesBegan:withEvent lub działanie rozpoznawania gestów, w zależności od sposobu obsługi dotykowej, ustaw _touchHasBegun na TAK lub NIE, stosownie do przypadku.

Kiedy wiesz, że twój widok wymaga aktualizacji, zadzwoń [self setNeedsDisplay] (lub [self setNeedsDisplayInRect:someRect] jeśli możesz, dla lepszej wydajności), aby uruchomić -drawRect: metoda. Więc, miej -drawRect: sprawdź, czy _touchHasBegun aby ustalić, czy narysować koło.

Uwaga: nigdy nie należy dzwonić -drawRect: siebie. Ustawiasz widok jako brudny, a system operacyjny zajmuje się rysowaniem go we właściwym czasie.