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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top