Como desenhar assinatura com linhas na tela do iPhone?
-
22-08-2019 - |
Pergunta
Eu quero deixar o usuário desenhar uma assinatura na tela do iPhone, então eu adicionar uma subclasse de UIView e adicionar algum código para seu método 'touchesMoved'.
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
firstTouch = [touch locationInView:self];
CGSize mySize = CGSizeMake(5, 5);
UIGraphicsBeginImageContext(mySize);
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextBeginPath(ctx);
CGContextSetRGBFillColor(ctx, 1, 0, 0, 1);
CGContextAddRect(ctx, CGRectMake(0, 0, 5, 5));
CGContextFillPath(ctx);
UIImage *redRect = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageView *redRectView = [[UIImageView alloc] initWithImage:redRect];
redRectView.center = CGPointMake(firstTouch.x, firstTouch.y);
[self addSubview:redRectView];
}
Eu estou puxando-o com pequenos retângulos e acaba por ser ponto por ponto. Como é muito feio, quero chamar a assinatura com linhas. Mas como distinguir firstTouch e lastTouch? Se eu só usar o método 'touchesMoved', eu só pode obter um ponto de contato.
Solução
De acordo com o UIResponder Classe Referência , você também precisará implementar
– touchesBegan:withEvent:
e
– touchesEnded:withEvent:
.
Depois de implementar esses métodos, você deve ser capaz de obter dados suficientes para implementar uma curva pathing bezier ou outra solução adequada.
[ Editar ] A talvez melhor solução seria para ser obter os toques diretamente do objeto UIEvent
uma vez que seu controlador recebe um
– touchesMoved:withEvent:
notificação. Além disso, o GLPaint amostra de código também pode ser útil.
Outras dicas
Como o código de exemplo GLPaint pode ser muito complicado para iniciantes, acho este tutorial. É simples de aprender para a maioria dos iniciantes.
Tenha em mente que uma assinatura escrita com o dedo de um vai ser diferente do que um escrito com um instrumento de escrita. Você pode querer repensar o que você está usando a assinatura para, e se é tão vinculativos como você precisa que ele seja.