2

ユーザーが iPhone の画面に署名を描画できるようにしたいので、UIView のサブクラスを追加し、その '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];                                      

}

小さな長方形で描いていますが、ドットバイドットであることがわかりました。あまりにも醜いので、署名を線で描きたいと思います。しかし、firstTouch と lastTouch を区別する方法は? 「touchesMoved」メソッドのみを使用すると、1 つのタッチ ポイントしか取得できません。

4

3 に答える 3

3

UIResponder Class Referenceに従って、
– touchesBegan:withEvent:およびも実装する必要があり
– touchesEnded:withEvent:ます。
これらのメソッドを実装した後、パス ベジェ曲線またはその他の適切なソリューションを実装するのに十分なデータを取得できるはずです。

[編集UIEvent] おそらくより良い解決策は、コントローラーが通知を受け取ったら、オブジェクトから直接タッチを取得すること
– touchesMoved:withEvent: です。また、GLPaint サンプル コードも役立つ場合があります。

于 2009-03-25T06:23:52.587 に答える
0

指で書かれた署名は、筆記具で書かれたものとは異なることに注意してください。署名を何に使用しているか、必要な拘束力があるかどうかを再考することをお勧めします。

于 2009-03-30T05:51:47.570 に答える