/ / Desenhe um círculo quando clicado usando quartzo - objetivo-c, toque de cacau, quartzo-gráficos

Desenhe um círculo quando clicado usando quartzo-objetivo-c, cacau-toque, quartzo-gráficos

Quero que um círculo seja desenhado quando o usuário clicar em qualquer lugar da tela. O que está faltando / está errado com este código?

- (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);
}

}

Respostas:

1 para resposta № 1

Seu código não faz o que você pensa. Veja a definição de UITouchPhaseBegan dentro 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)
};

É apenas um valor enum, não um reflexo do queestá acontecendo no seu aplicativo. Acredito que, neste caso, por ser o primeiro valor no enum, provavelmente está sendo definido como 0 pelo compilador e, portanto, está sempre avaliando como falso.

O que você provavelmente quer fazer é definir um ivar como BOOL _touchHasbegun;. Então, em -touchesBegan:withEvent ou sua ação do reconhecedor de gestos, dependendo de como você está lidando com o toque, defina _touchHasBegun para SIM ou NÃO, conforme apropriado.

Quando você souber que sua visualização precisa ser atualizada, ligue para [self setNeedsDisplay] (ou [self setNeedsDisplayInRect:someRect] se possível, para obter melhor desempenho) para acionar o -drawRect: método. Então, tenha seu -drawRect: método verificar se _touchHasBegun para determinar se você deseja desenhar seu círculo.

Nota: você nunca deve ligar -drawRect: você mesmo. Você define a vista como suja e o sistema operacional cuida de desenhá-la no momento certo.